npm介紹
包管理器(Package Manager)
npm 最初它只是被稱為 Node Package Manager钩蚊,用來作為Node.js的包管理器惫企。但是隨著其它構(gòu)建工具(webpack、browserify)的發(fā)展吗冤,npm已經(jīng)變成了 "the package manager for JavaScript"李根,它用來安裝饱亿、管理和分享JavaScript包,同時(shí)會(huì)自動(dòng)處理多個(gè)包之間的依賴房轿。
安裝npm
新版的nodejs已經(jīng)集成了npm
Node.js:nodejs分為了長期支持版和當(dāng)前版本衙吩。
Linux中安裝nodejs的方法:
-
官網(wǎng) 下載壓縮包解壓到
/opt
目錄,修改解壓目錄的所屬用戶和組芥备,然后配置環(huán)境變量(推薦)冬耿; - 或者使用PPA安裝:How to Install Latest Nodejs & NPM on Ubuntu with PPA - TecAdmin
升級(jí)現(xiàn)有npm版本
npm install npm -g
貌似也可使用這種方法安裝node,但是安裝的是當(dāng)前版本的node而非長期支持版本的node萌壳。
更換 npm 鏡像站點(diǎn)
對(duì)于國內(nèi)的情形亦镶,在使用npm安裝JS包之前建議先更改npm的鏡像日月。
配置 npm 的國內(nèi)鏡像站點(diǎn)為:https://registry.npm.taobao.org
。
方法一:在系統(tǒng)的HOME目錄新建.npmrc
文件并添加 registry = https://registry.npm.taobao.org
方法二:你可以使用淘寶定制的 cnpm 命令行工具代替默認(rèn)的 npm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
//之后即可使用cnpm來安裝包
cnpm install <包>
詳情請(qǐng)參考: 淘寶 NPM 鏡像
本地安裝(默認(rèn))
npm 的包安裝分為本地安裝(local)缤骨、全局安裝(global)兩種爱咬。
npm install <包> # 本地安裝
# 或者
npm i <包>
- 將安裝包放在 ./node_modules 下(運(yùn)行 npm 命令時(shí)所在的目錄),如果沒有 node_modules 目錄绊起,會(huì)在當(dāng)前執(zhí)行 npm 命令的目錄下生成 node_modules 目錄精拟。
- 可以通過 require() 來引入本地安裝的包。
全局安裝
npm install <包> -g # 全局安裝
- 將安裝包放在 /usr/local 下或者你 node 的安裝目錄虱歪。
- 可以直接在命令行里使用蜂绎。這是使用全局安裝的主要原因。
使用下面的命令來查看全局的包安裝的位置:
npm prefix -g
創(chuàng)建全局鏈接
如果你希望具備兩者功能(本地安裝和全局安裝的功能)笋鄙,則需要在兩個(gè)地方安裝它或使用 npm link师枣。
npm link的功能是在本地包和全局包之間創(chuàng)建符號(hào)鏈接。我們說過使用全局模式安裝的包不能直接通過 require 使用,但通過 npm link 命令可以打破這一限制局装。
比如我們將 express安裝到了全局環(huán)境坛吁,使用下面的命令可以將其鏈接到本地環(huán)境:
npm link express
使用 npm link命令還可以將本地的包鏈接到全局。使用方法是在包目錄( package.json 所在目錄)中運(yùn)行 npm link
命令铐尚。
如果你的項(xiàng)目不再需要該模塊拨脉,可以在項(xiàng)目目錄內(nèi)使用npm unlink命令,刪除符號(hào)鏈接宣增。
像gem 或 pip 總是以全局模式安裝玫膀,使包可以供所有的程序使用,而 npm 默認(rèn)會(huì)把包安裝到當(dāng)前目錄下爹脾。這反映了 npm 不同的設(shè)計(jì)哲學(xué)帖旨。如果把包安裝到全局,可以提高程序的重復(fù)利用程度,避免同樣的內(nèi)容的多份副本灵妨,但壞處是難以處理不同的版本依賴解阅。
常用命令
查看命令幫助
npm help <某命令>
列出各命令
npm -l
查看安裝信息
安裝信息和它們的依賴
//全局安裝信息
npm ls -g
//列出當(dāng)前項(xiàng)目中的包
npm ls
卸載包
npm uninstall <包名>
更新包
//更新當(dāng)前項(xiàng)目中安裝的某個(gè)包
npm update <包名>
//更新當(dāng)前項(xiàng)目中安裝的所有包
npm update
//更新全局安裝的包
npm update <包名> -g
搜索包
npm search <關(guān)鍵字>
列出npm的配置
npm config list -l
列出bin目錄
npm bin
使用 package.json
當(dāng)你的項(xiàng)目需要依賴多個(gè)包時(shí),推薦使用 package.json泌霍。其優(yōu)點(diǎn)為:
- 它以文檔的形式規(guī)定了項(xiàng)目所依賴的包
- 可以確定每個(gè)包所使用的版本
- 項(xiàng)目的構(gòu)建可以重復(fù)货抄,在多人協(xié)作時(shí)更加方便
創(chuàng)建package.json文件
- 手動(dòng)創(chuàng)建
- 或者 通過
npm init
命令生成遵守規(guī)范的 package.json文件
文件中必須包含: name 和 version
指定依賴包
兩種依賴包:
- dependencies: 在生產(chǎn)環(huán)境中需要依賴的包。通過
npm install <packge> --save
命令自動(dòng)添加依賴到文件(或者使用簡寫的參數(shù)-S
)朱转。 - devDependencies:僅在開發(fā)和測試環(huán)節(jié)中需要依賴的包蟹地。通過
npm install <packge> --save-dev
命令自動(dòng)添加依賴到文件(或者使用簡寫的參數(shù)-D
)。
當(dāng)然你也可以在文件中手動(dòng)添加依賴
如果其他人也需要這個(gè)項(xiàng)目藤为,只需要把這個(gè) package.json 文件給他怪与,然后進(jìn)行簡單的 npm install
即可。
設(shè)置默認(rèn)配置
使用 npm set
命令用來設(shè)置環(huán)境變量缅疟。
也可以用它來為 npm init
設(shè)置默認(rèn)值分别,這些值會(huì)保存在 ~/.npmrc
文件中遍愿。
$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://yourdomain.com'
$ npm set init-license 'MIT'
更改全局安裝目錄
使用npm config
命令可以達(dá)到此目的。
npm config set prefix <目錄>
或者手動(dòng)在 ~/.npmrc
文件中進(jìn)行配置:
prefix = /home/yourUsername/npm
更改目錄后記得在系統(tǒng)環(huán)境變量 PATH
中添加該路徑:
# .bashrc 文件
export PATH=~/npm/bin:$PATH
多版本管理器
Node.js 的社區(qū)開發(fā)了多版本管理器茎杂,用于在一臺(tái)機(jī)器上維護(hù)多個(gè)版本的 Node.js 實(shí)例错览,方便按需切換。Node 多版本管理器(Node Version Manager煌往,nvm)是一個(gè)通用的叫法倾哺,它目前有許多不同的實(shí)現(xiàn)。這里使用visionmedia/n刽脖。n 是一個(gè)十分簡潔的 Node 多版本管理器羞海。
如果已經(jīng)安裝好npm則可以簡單的使用 npm install -g n
來安裝n。事實(shí)上曲管,n 并不需要 Node.js 驅(qū)動(dòng)却邓,它只是 bash 腳本;我們可以在 https://github.com/visionmedia/n 下載它的代碼院水,然后使用 make install
命令安裝腊徙。
n的常用命令:
# 查看幫助
n --help
# 安裝 6.9.5版本的nodejs。
# 通過 n 獲取的 Node.js 實(shí)例都會(huì)安裝在 /usr/local/n/versions/ 目錄中(看情況吧)
n 6.9.5
# 列出已經(jīng)安裝的 Node.js 檬某。結(jié)果中 * 表示默認(rèn)版本
n
# 版本切換撬腾,與安裝node.js一樣
n 6.9.5
# 指明使用某版本的 node.js 執(zhí)行某腳本(比如 script.js)
n use 6.9.5 script.js
-
PREFIX=$CUSTOM_LOCATION make install
; 自定義n
的安裝路徑(避免使用sudo) - 自定義node.js的安裝路徑(通過n安裝)恢恼;通過設(shè)置環(huán)境變量
export N_PREFIX=$HOME
- 自定義 source民傻。(鏡像站點(diǎn))
- 自定義 架構(gòu)(architecture)
- 如果使用n切換了node.js的版本后,npm沒有正確運(yùn)行场斑,通過運(yùn)行相關(guān)腳本解決漓踢。(見 n: working-with-npm)
詳細(xì)用法見 : n: Node version management
注意:n 無法管理通過其他方式安裝的 Node.js 版本實(shí)例(如官方提供的安裝包、發(fā)行版軟件源漏隐、手動(dòng)編譯)喧半,也就說無法管理不是用 n 安裝的node.js。
n 不支持在Windows上使用:“Unfortunately
n
is not supported on Windows yet”青责。GNVM 是一個(gè)簡單的
Windows
下 Node.js 多版本管理器薯酝。
發(fā)布包
在發(fā)布之前,首先需要讓我們的包符合 npm 的規(guī)范,npm 有一套以 CommonJS 為基礎(chǔ)包規(guī)范,但與 CommonJS并不完全一致,其主要差別在于必填字段的不同。通過使用 npm init
可以根據(jù)交互問答產(chǎn)生一個(gè)符合標(biāo)準(zhǔn)的 package.json爽柒。
npm init 運(yùn)行示例:
$ npm init
name: (node) test
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /tmp/node/package.json:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this ok? (yes)
該文件就是一個(gè)符合 npm 規(guī)范的 package.json 文件。這里的 index.js 作為包的接口者填。
也可簡單的使用
npm init -y
浩村。其中-y
(代表yes)
創(chuàng)建帳號(hào):
npm adduser
測試是否取得帳號(hào):
npm whoami
發(fā)布
npm publish
更新包:修改 version字段,再重新發(fā)布
取消發(fā)布:
npm unpublish
npm 腳本
npm scripts 使用指南 - 阮一峰的網(wǎng)絡(luò)日志
npm run
package.json
文件有一個(gè)scripts
字段占哟,可以用于指定腳本命令心墅,供npm
直接調(diào)用酿矢。
"scripts": {
"lint": "jshint **.js",
"test": "mocha test/"
}
npm run lint
可以運(yùn)行腳本中的 lint 命令。npm run test
可以運(yùn)行腳本中的 test 命令怎燥。
npm run
命令會(huì)自動(dòng)在環(huán)境變量$PATH
添加node_modules/.bin
目錄瘫筐,所以scripts
字段里面調(diào)用命令時(shí)不用加上路徑,這就避免了全局安裝NPM模塊铐姚。
start
和test
屬于特殊命令策肝,可以省略run
:
npm start
npm test
如果僅僅使用npm run
會(huì)列出scripts屬性下所有的命令:
npm run
npm模塊安裝機(jī)制
npm 模塊安裝機(jī)制簡介 - 阮一峰的網(wǎng)絡(luò)日志
學(xué)習(xí)資料
NPM 使用介紹 - 菜鳥教程
npm Documentation
如何卸載使用npm鏈接安裝的軟件包?
package.json文件 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)
npm模塊管理器 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)