npm 初學(xué)者教程,如果你是一名初學(xué)者,可以進(jìn)來看看哦~



Node.js 讓 JavaScript 編寫服務(wù)器端應(yīng)用程序成為可能。它建立在 JavaScript V8(C++ 編寫的) 運行時之上,所以它很快。最初,它旨在為應(yīng)用程序提供服務(wù)器環(huán)境,但是開發(fā)人員開始利用它來創(chuàng)建工具,幫助他們本地的任務(wù)自動化。此后,一個全新基于 Node 工具(如 Grunt 和 Gulp)的生態(tài)系統(tǒng),使得前端開發(fā)改頭換面。

要使用 Node.js 中的這些工具(或包),我們需要一種有效的方式來安裝和管理它們。這就要用到node 包管理器: npm 了。它能夠安裝你想要的包,而且提供一個強大接口來使用它們。在使用 npm 之前,首先得在系統(tǒng)上安裝 Node.js。

安裝 Node.js

先去 Node.js 的下載頁面,然后選擇你需要的版本。有 Windows 和 Mac 版的安裝程序可以用,還有預(yù)編譯的 Linux 二進(jìn)制文件和源代碼。對于 Linux ,也可以用包管理器來安裝 Node,下面將詳細(xì)介紹。

這篇教程中使用的是 v.5.7.0 穩(wěn)定版。

先看看 node 被安裝到哪了,然后確認(rèn)下版本。

$ which node

/usr/local/bin/node

$ node --version

v5.7.0

驗證下安裝是否成功,試試 Node REPL 。

$ node

> console.log('Node is running');

Node is running

> .help

.break Sometimes you get stuck, this gets you out

.clear Alias for .break

.exit Exit the repl

.help Show repl options

.load Load JS from a file into the REPL session

.save Save all evaluated commands in this REPL session to a file

> .exit

安裝的 Node.js 工作了,那么把注意力集中到 npm 上吧,安裝 Node.js 過程中也安裝了 npm 。

$ which npm

/usr/local/bin/npm

$ npm --version

3.6.0

Node 包模塊

npm

有兩種模式安裝包,local(本地) 和 global(全球) 。在 local 模式下,它會安裝 node_modules

文件夾(在工作目錄的父目錄)中的包。這個位置是屬于當(dāng)前用戶的。Global 包安裝在 root 用戶下

{prefix}/lib/node_modules/ ({prefix} 通常是 /usr/ 或者 /usr/local)。這就意味需要使用

sudo 命令來安裝 global 包,否則當(dāng)解析第三方包依賴時,出于安全考慮可能會出現(xiàn)權(quán)限錯誤。

讓我們來修改下:

看看 npm config 輸出了些啥。

$ npm config list

; cli configs

user-agent = "npm/3.6.0 node/v5.7.0 linux x64"

; node bin location = /usr/local/bin/node

; cwd = /home/sitepoint

; HOME = /home/sitepoint

; 'npm config ls -l' to show all defaults.

輸出了一些安裝信息。現(xiàn)在獲取當(dāng)前 global 位置是很重要的。

$ npm config get prefix

/usr/local

這是我們想要改變的前綴,那樣就能把 global 包安裝到我們的 home 目錄中。在你的 home 文件夾中創(chuàng)建一個新的目錄。

$ cd && mkdir .node_modules_global

$ npm config set prefix=$HOME/.node_modules_global

簡單的修改下配置,就把 Node global 包的安裝位置改變了。這個操作也會在我們的 home 目錄中生成一個 .npmrc 文件。

$ npm config get prefix

/home/sitepoint/.node_modules_global

$ cat .npmrc

prefix=/home/sitepoint/.node_modules_global

npm 安裝位置仍然在 root 用戶的目錄中。但因為改變了 global 包的位置,所以可以利用這一點。我們需要重新安裝 npm,但這次安裝在新用戶自備的位置。這次也是安裝最新版本的 npm。

$ npm install npm --global

/home/sitepoint/.node_modules_global/bin/npm -> /home/sitepoint/.node_modules_global/lib/node_modules/npm/bin/npm-cli.js

/home/sitepoint/.node_modules_global/lib

└── npm@3.7.5

最后,需要將 .node_modules_global/bin 添加到環(huán)境變量 $PATH 中,這樣就可以在命令行中運行 global 包命令。將下面這行命令追加到 .profile 或 .bash_profile 中,然后重啟終端。

export PATH="$HOME/.node_modules_global/bin:$PATH"

現(xiàn)在就會先發(fā)現(xiàn) .node_modules_global/bin,然后使用正確版本的 npm。

$ which npm

/home/sitepoint/.node_modules_global/bin/npm

$ npm --version

3.7.5

Global 模式下安裝包

目前只安裝了一個 global 包,那就是 npm 本身。所以讓我們來試試其他的,安裝 UglifyJS(一個 JavaScript 壓縮工具 )。我們將使用 –global 標(biāo)識,可以簡寫成 -g。

$ npm install uglify-js --global

/home/sitepoint/.node_modules_global/lib

└─┬ uglify-js@2.6.2

├── async@0.2.10

├── source-map@0.5.3

├── uglify-to-browserify@1.0.2

└─┬ yargs@3.10.0

├── camelcase@1.2.1

├─┬ cliui@2.1.0

│ ├─┬ center-align@0.1.3

│ │ ├─┬ align-text@0.1.4

│ │ │ ├─┬ kind-of@3.0.2

│ │ │ │ └── is-buffer@1.1.2

│ │ │ ├── longest@1.0.1

│ │ │ └── repeat-string@1.5.4

│ │ └── lazy-cache@1.0.3

│ ├── right-align@0.1.3

│ └── wordwrap@0.0.2

├─┬ decamelize@1.1.2

│ └── escape-string-regexp@1.0.5

└── window-size@0.1.0

正如從輸出中所看到的,額外的一些包也被安裝了,這些都是 uglify.js 所依賴的其他包。

列出所有 global 包

可以用 npm list 命令列出所有我們安裝的 global 包。

$ npm list --global

├─┬ npm@3.7.5

│ ├── abbrev@1.0.7

│ ├── ansi-regex@2.0.0

│ ├── ansicolors@0.3.2

│ ├── ansistyles@0.1.3

....................

└─┬ uglify-js@2.6.2

├── async@0.2.10

├── source-map@0.5.3

├── uglify-to-browserify@1.0.2

不過輸出太冗長了。可以使用 –depth=0 參數(shù)來控制輸出。

$ npm list -g --depth=0

├── npm@3.7.5

└── uglify-js@2.6.2

這就好多了,只輸出安裝的包和它們的版本號。

可以在終端中使用 uglifyjs 解析 JavaScript 文件。例如使用下面的命令可以將 example.js 轉(zhuǎn)換成 example.min.js :

$ uglifyjs example.js -o example.min.js

local 模式安裝包

local 模式安裝包去掉 –global 參數(shù)就行了。包將被安裝在父級工作目錄中一個 node_modules 文件夾里。在 home 目錄中創(chuàng)建一個文件夾:

$ mkdir ~/project && cd ~/project

$ npm install underscore

/home/sitepoint/project

└── underscore@1.8.3

$ ls

node_modules

$ ls node_modules

underscore

列出所有 local 包

和 global 包一樣,使用 npm list 命令就能列出所有 local 包。

$ npm list

/home/sitepoint/project

└── underscore@1.8.3

正如你所見,我們可以把 local 包安裝在任何我們想安裝的位置。這就意味著可以創(chuàng)建另外一個目錄然后安裝一個不同版本的 underscore。

卸載 local 包

npm 是一個包管理器,所以它肯定也可以卸載一個包。讓我們假設(shè)當(dāng)前版本的 underscore 包存在兼容問題。移除當(dāng)前的包然后安裝一個老版本的,像這樣:

$ npm uninstall underscore

- underscore@1.8.3 node_modules/underscore

$ npm list

/home/sitepoint/project

└── (empty)

安裝一個指定版本的包

現(xiàn)在可以安裝我們想要的版本的 underscore 包。@ 后面追加版本號就可以了。

$ npm install underscore@1.8.2

/home/sitepoint/project

└── underscore@1.8.2

$ npm list

/home/sitepoint/project

└── underscore@1.8.2

更新包

最新版本的 underscore 修復(fù)了一些之前的 bug ,然后我們想要更新包到最新版本。

$ npm update underscore

underscore@1.8.3 node_modules/underscore

$ npm list

/home/sitepoint/project

└── underscore@1.8.3

注意:對于這項操作,underscore 已經(jīng)在 package.json 中已經(jīng)被當(dāng)成依賴列出來了(看看如何管理依賴)。

搜索包

在本教程中多次使用 mkdir 命令。是否有一個 node 包 來做這件事情呢?

$ npm search mkdir

npm WARN Building the local index for the first time, please be patient

有個 mkdirp。安裝它。

$ npm install mkdirp

/home/sitepoint/project

└─┬ mkdirp@0.5.1

└── minimist@0.0.8

現(xiàn)在創(chuàng)建一個 mkdir.js 文件。

var mkdirp = require('mkdirp');

mkdirp('foo', function (err) {

if (err) console.error(err)

else console.log('Directory created!')

});

然后在終端中運行它:

$ node. mkdir.js

Directory created!

管理緩存

當(dāng) npm 安裝一個包的時候它會維護(hù)一個副本,下次你想再次安裝那個包的時候,就不用再去訪問網(wǎng)絡(luò)重新下載了。那些副本會在 home 目錄 .npm 文件夾中緩存起來。

$ ls ~/.npm

_locks minimist mkdirp registry.npmjs.org underscore

隨著時間推移,這個目錄里會有很多老的包,十分的混亂,所以時常清理下是十分有必要的。

$ npm cache clean

管理依賴

目前在我們的項目目錄中只安裝了兩個包,不過包的數(shù)量會增長的非常快。手動安裝依賴是非常不明智的,所以可以在項目目錄中用 package.json 文件來管理它們。通過 nmp init 命令可以創(chuàng)建。

$ npm init

This utility will walk you through creating a package.json file.

Press ^C at any time to quit.

name: (project) demo

version: (1.0.0)

description: Demo of package.json

entry point: (index.js)

test command:

git repository:

keywords:

author: Sitepoint

license: (ISC)

這會在項目根目錄中創(chuàng)建下面的文件

{

"name": "demo",

"version": "1.0.0",

"description": "Demo package.json",

"main": "main.js",

"dependencies": {

"mkdirp": "^0.5.1",

"underscore": "^1.8.3"

},

"devDependencies": {},

"scripts": {

"test": "echo "Error: no test specified" && exit 1"

},

"author": "Sitepoint",

"license": "ISC"

}

如果你想快速生成一個 package.json 文件的話,使用下面的命令:

$ npm init --yes

會快速創(chuàng)建一個 package.json 文件,你的目錄名會被作為 name 屬性。

還可以添加參數(shù) private: true 防止私有庫不小心被發(fā)布,還能消除運行 npm 安裝時的各種警告。讓我們創(chuàng)建一個新的目錄,使用 package.json 文件來安裝依賴。

$ mkdir ~/demo && cd ~/demo

$ cp ~/project/package.json ~/demo

$ npm install

$ npm list

demo@1.0.0 /home/sitepoint/demo

├─┬ mkdirp@0.5.1

│ └── minimist@0.0.8

└── underscore@1.8.3

看看基于 package.json 文件在另外一個目錄中安裝包是多么的簡單。但是當(dāng)安裝新包的時候如何讓它保持最新呢?我們可以使用 –save 標(biāo)識。

$ npm install request --save

$ npm list --depth=0

demo@1.0.0 /home/sitepoint/demo

├── mkdirp@0.5.1

├── request@2.53.0

└── underscore@1.8.3

然后 package.json 也就被更新了。

"dependencies": {

"mkdirp": "^0.5.1",

"request": "^2.53.0",

"underscore": "^1.8.3"

}

版本管理

有些工具可以幫你在同一臺機器上管理不同版本的 Node.js。有個叫 n 的工具。還有個是 nvm(Node Version Manager)。如果你對這些有興趣的話,不妨看看我們另外一篇教程: 使用 nvm 安裝多版本 Node.js。

總結(jié)

這篇教程中,講解了使用 npm 工作的基本知識。展示了如何從項目下載頁面安裝 Node.js,如何修改 global 包的位置(避免使用

sudo 命令),還有如何在 local 、 global 模式下安裝包。以及刪除、更新、安裝指定版本的包,最后還有管理項目依賴。

你會在項目中使用 npm 嗎?在 npm 倉庫有數(shù)以千計的包,隨著 jQuery 插件也能快速在 npm 倉庫發(fā)布,包的數(shù)量肯定會保持增長。哪些包對你來講不可或缺?

小編將繼續(xù)發(fā)布更多的免費學(xué)習(xí)資料喔O(∩_∩)O,需要全套的就趕緊加微信號:aoyolo


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容