npm詳細(xì)教程

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的方法:

升級(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模塊铐姚。

starttest屬于特殊命令策肝,可以省略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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隐绵,一起剝皮案震驚了整個(gè)濱河市之众,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌依许,老刑警劉巖棺禾,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異峭跳,居然都是意外死亡膘婶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蛀醉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬襟,“玉大人,你說我怎么就攤上這事滞欠」诺ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵筛璧,是天一觀的道長逸绎。 經(jīng)常有香客問我,道長夭谤,這世上最難降的妖魔是什么棺牧? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮朗儒,結(jié)果婚禮上颊乘,老公的妹妹穿的比我還像新娘。我一直安慰自己醉锄,他們只是感情好乏悄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恳不,像睡著了一般檩小。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烟勋,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天规求,我揣著相機(jī)與錄音筐付,去河邊找鬼。 笑死阻肿,一個(gè)胖子當(dāng)著我的面吹牛瓦戚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丛塌,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼较解,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了姨伤?” 一聲冷哼從身側(cè)響起哨坪,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乍楚,沒想到半個(gè)月后当编,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徒溪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忿偷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臊泌。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲤桥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渠概,到底是詐尸還是另有隱情茶凳,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布播揪,位于F島的核電站贮喧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏猪狈。R本人自食惡果不足惜箱沦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雇庙。 院中可真熱鬧谓形,春花似錦、人聲如沸疆前。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹椒。三九已至冯袍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背康愤。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舶吗,地道東北人征冷。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像誓琼,于是被迫代替她去往敵國和親检激。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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