本文內(nèi)容基于 npm 4.0.5
概述
npm (node package manager)
刚梭,即 node 包管理器体捏。這里的 node 包就是指各種 javascript 庫(kù)青伤。
npm
是隨同 Node.js
一起安裝的包管理工具立倍,所以不需要獨(dú)立安裝窄驹。
可以通過查看版本號(hào)來檢測(cè) npm
是否已經(jīng)安裝成功:
npm -v
如果已經(jīng)安裝了npm
脓斩,想要升級(jí),只需要一條命令即可:
npm install npm -g
package.json
簡(jiǎn)介
使用 npm 來管理的 javascript 項(xiàng)目一般都有一個(gè)package.json
文件义桂。它定義了這個(gè)項(xiàng)目所依賴的各種包找筝,以及項(xiàng)目的配置信息(比如名稱、版本慷吊、依賴等元數(shù)據(jù))袖裕。
package.json
中的內(nèi)容就是 json 形式。
重要字段
name - 包名溉瓶。
version - 包的版本號(hào)急鳄。
description - 包的描述。
homepage - 包的官網(wǎng) url 堰酿。
author - 包的作者姓名疾宏。
contributors - 包的其他貢獻(xiàn)者姓名。
dependencies - 指定項(xiàng)目運(yùn)行所依賴的模塊胞锰。
devDependencies - 指定項(xiàng)目開發(fā)所依賴的模塊灾锯。
repository - 包代碼存放的地方的類型,可以是 git 或 svn嗅榕,git 可在 Github 上顺饮。
main - main 字段是一個(gè)模塊ID,它是一個(gè)指向你程序的主要項(xiàng)目凌那。就是說兼雄,如果你包的名字叫 express,然后用戶安裝它帽蝶,然后require("express")赦肋。
keywords - 關(guān)鍵字
bin - 用來指定各個(gè)內(nèi)部命令對(duì)應(yīng)的可執(zhí)行文件的位置。
scripts - 指定了運(yùn)行腳本命令的npm命令行縮寫。
例:一個(gè)完整的package.json
{
"name": "reactnotes",
"version": "1.0.0",
"description": "react 教程",
"main": "./index.js",
"dependencies": {
"react": "^15.4.1",
"react-dom": "^15.4.1"
},
"devDependencies": {
"webpack-dev-server": "^1.16.2"
},
"scripts": {
"start": "node index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/atlantis1024/ReactNotes.git"
},
"author": "victor",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/atlantis1024/ReactNotes/issues"
},
"homepage": "https://github.com/atlantis1024/ReactNotes#readme"
}
package 版本
上文介紹 package.json 文件中的 dependencies
和 devDependencies
字段佃乘,這二者都是 json 數(shù)組囱井。它們的每個(gè) json 子對(duì)象,key 表示包名趣避,value 表示版本庞呕。
npm 允許的版本聲明方式十分多樣。下面將為你介紹一二程帕。
說明
-
version
:安裝一個(gè)確定的版本住练,遵循“大版本.次要版本.小版本”的格式規(guī)定。如:1.0.0愁拭。 -
~version
:以~1.0.0
來舉例讲逛,表示安裝1.0.x的最新版本(不低于1.0.0)。但是大版本號(hào)和次要版本號(hào)不能變岭埠。 -
^version
:以^1.0.0
來舉例盏混,表示安裝1.x.x的最新版本(不低于1.0.0),但是大版本號(hào)不能變枫攀。 -
1.2.x
:表示安裝1.2.x括饶。 -
>、>=来涨、<、<=
:可以像數(shù)組比較一樣启盛,使用比較符來限定版本范圍蹦掐。 -
version1 - version2
:相當(dāng)于>=version1 <=version2
. -
range1 || range2
:版本滿足range1 或 range2 兩個(gè)限定條件中任意一個(gè)即可。 -
tag
:一個(gè)指定 tag 對(duì)應(yīng)的版本僵闯。 -
*
或""
(空字符串):任意版本卧抗。 -
latest
:最新版本。 -
http://...
或file://...
:你可以指定http或本地文件路徑下的包作為版本鳖粟。 -
git...
:參考下面的“直接將 Git Url 作為依賴包版本” -
user/repo
:參考下面的“直接將 Git Url 作為依賴包版本”
例:下面的版本聲明都是有效的
{ "dependencies" :
{ "foo" : "1.0.0 - 2.9999.9999"
, "bar" : ">=1.0.2 <2.1.2"
, "baz" : ">1.0.2 <=2.3.4"
, "boo" : "2.0.1"
, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
, "asd" : "http://asdf.com/asdf.tar.gz"
, "til" : "~1.2"
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
, "lat" : "latest"
, "dyl" : "file:../dyl"
}
}
直接將 Git Url 作為依賴包版本
Git Url形式可以如下:
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
常用命令
npm 的命令很多社裆,這里,我挑選幾條 npm 中比較重要的命令來介紹向图。
更多詳情可以參考 <u>npm 官方文檔</u>
help
個(gè)人認(rèn)為這是最重要的命令泳秀。對(duì)命令行的用法有問題的時(shí)候,還有什么比查看幫助信息更有用呢榄攀?
查看 npm 命令列表**
npm -h
查看所有命令使用方法
npm -l
查看某條命令詳細(xì)幫助信息
如:要查看 npm install 命令的詳細(xì)幫助信息
- 查看命令的快捷幫助信息
npm install -h
- 打開命令的幫助文檔
npm help install
npm init
npm init
用于初始化一個(gè)新的package.json
文件嗜傅。
命令格式
npm init [-f|--force|-y|--yes]
說明
執(zhí)行命令后,npm 會(huì)問你一系列問題檩赢,然后在執(zhí)行命令的目錄下創(chuàng)建一個(gè)package.json
文件吕嘀。
如果使用 -f
/ --force
或 -y
/ --yes
,npm 會(huì)使用默認(rèn)值為你創(chuàng)建 package.json
文件,不再詢問任何問題偶房。
npm install
npm install
用于安裝模塊趁曼。
命令格式
npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <tarball file>
npm install <tarball url>
npm install <folder>
alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--dry-run]
說明
-
npm install
(with no args, in package dir)默認(rèn)的,將
package.json
中聲明的所有模塊安裝到當(dāng)前路徑下的 node_modules 目錄中棕洋。這稱為本地安裝挡闰。如果,加上 -g, --global 參數(shù)拍冠,npm 會(huì)將當(dāng)前包安裝到全局(系統(tǒng)目錄下)尿这,這稱為全局安裝。
-
npm install <folder>
安裝位于文件系統(tǒng)上某文件夾中的包庆杜。
-
npm install <tarball file>
安裝位于文件系統(tǒng)上的包射众。注意:如果你只想鏈接一個(gè) dev 目錄到你的 npm 根目錄,使用
npm link
更容易做到這一點(diǎn)晃财。例:
npm install ./package.tgz
-
npm install <tarball url>
獲取 url叨橱,然后安裝它。為了區(qū)分此選項(xiàng)和其他選項(xiàng)断盛,參數(shù)必須以“http://”或“https://”開頭罗洗。
例:
npm install https://github.com/indexzero/forever/tarball/v0.5.6
-
npm install [<@scope>/] [-S|--save|-D|--save-dev|-O|--save-optional]
例:
npm install sax
npm install
有3個(gè)可選參數(shù),用于保存或更新主package.json中的包版本:-S, --save
:包將被添加到dependencies
钢猛。-D, --save-dev
:包將被添加到devDependencies
伙菜。-O, --save-optional
:包將被添加到optionalDependencies
。
當(dāng)使用上述任何選項(xiàng)將依賴保存到package.json時(shí)命迈,有兩個(gè)額外的可選標(biāo)志:
-
-E, --save-exact
:會(huì)在package.json
文件指定安裝模塊的確切版本贩绕。 -
-B, --save-bundle
: 包也將被添加到bundleDependencies
。
-
npm install [<@scope>/]<name>@<tag>
安裝被 tag 引用的包的版本壶愤。如果 tag 不存在于該包的注冊(cè)表數(shù)據(jù)中淑倾,則失敗。
例:npm install sax@latest npm install @myorg/mypackage@latest
-
npm install [<@scope>/]<name>@<version>
安裝指定的包的版本征椒。如果版本尚未發(fā)布到注冊(cè)表娇哆,則失敗。
例:
npm install sax@0.1.1 npm install @myorg/privatepackage@1.5.0
-
npm install [<@scope>/]<name>@<version range>
安裝與指定版本范圍相匹配的包版本勃救。例:
npm install sax@">=0.1.0 <0.2.0" npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
npm uninstall
npm uninstall
用于卸載包碍讨。
命令格式
npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]
aliases: remove, rm, r, un, unlink
說明
在全局模式下(即,在命令中附加-g
或--global
)剪芥,它將當(dāng)前包上下文作為全局包卸載垄开。
npm uninstall
有3個(gè)可選參數(shù),用于保存或更新主 package.json 中的包版本:
-S, --save
:包將被添加到dependencies
税肪。-D, --save-dev
:包將被添加到devDependencies
溉躲。-O, --save-optional
:包將被添加到optionalDependencies
榜田。
例:
npm uninstall sax
npm uninstall sax --save
npm uninstall @myorg/privatepackage --save
npm uninstall node-tap --save-dev
npm uninstall dtrace-provider --save-optional
npm update
npm update
用于更新本地安裝的模塊。
命令格式
npm update [-g] [<pkg>...]
aliases: up, upgrade
說明
注:從npm@2.6.1開始锻梳,npm update
僅更新頂級(jí)包箭券。舊版本的 npm 會(huì)遞歸檢查所有的依賴。如果要達(dá)到舊版本的行為疑枯,請(qǐng)使用npm --depth 9999 update
辩块。
npm config
npm config
命令用于管理配置文件。
命令格式
npm config set <key> <value> [-g|--global]
npm config get <key>
npm config delete <key>
npm config list
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]
aliases: c
說明
-
npm config set <key> <value> [-g|--global]
: 設(shè)置一個(gè)配置參數(shù)荆永。例:
npm config set foo:port 80
-
npm config get <key>
:獲取一個(gè)配置參數(shù)废亭。例:
npm config get foo:port
-
npm config delete <key>
:刪除一個(gè)配置參數(shù)。例:
npm config delete foo:port
npm config list
:打印配置參數(shù)列表具钥。npm config edit
:直接編輯配置文件豆村。npm get <key>
:npm config get <key>
的簡(jiǎn)寫。npm set <key> <value> [-g|--global]
:npm config set <key> <value> [-g|--global]
的簡(jiǎn)寫骂删。
npm publish
npm publish
用于發(fā)布一個(gè)包掌动。
命令格式
npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
Publishes '.' if no argument supplied
Sets tag 'latest' if no --tag specified
說明
將包發(fā)布到注冊(cè)表,以便可以按名稱安裝宁玫。如果沒有本地 .gitignore
或 .npmignore
文件粗恢,則包括軟件包目錄中的所有文件。如果這兩個(gè)過濾文件都存在時(shí)欧瘪,某個(gè)文件被 .gitignore
忽略眷射,而不被 .npmignore
忽略,則它將被包括佛掖。
npm run
如果在 package.json
文件中的 scripts
字段定義了命令凭迹,就可以使用 npm run
來執(zhí)行腳本命令。
例:
假設(shè) package.json
文件中的 scripts
字段如下定義:
"scripts": {
"test": "mocha",
"lint": "eslint lib bin hot scripts",
"prepublish": "npm run test && npm run lint",
"start": "node index.js"
}
npm run test
:相當(dāng)于執(zhí)行 mocha
命令苦囱。它會(huì)開始執(zhí)行測(cè)試框架 Mocha 。
npm run lint
:相當(dāng)于執(zhí)行 eslint lib bin hot scripts
命令脾猛。它會(huì)開始執(zhí)行 eslint 檢查撕彤。
npm run prepublish
:相當(dāng)于執(zhí)行 npm run test
和 npm run lint
兩條命令。現(xiàn)在你了解如何復(fù)合命令了吧猛拴。
npm start
:相當(dāng)于執(zhí)行 node index.js
羹铅。Node.js 啟動(dòng)一個(gè)服務(wù)的入口腳本。