NPM依賴包版本號~和^和*的區別:
~ 會匹配最近的小版本依賴包,比如~1.2.3會匹配所有1.2.x版本,但是不包括1.3.0
^ 會匹配最新的大版本依賴包,比如^1.2.3會匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
- 這意味著安裝最新版本的依賴包
推薦使用~,只會修復版本的bug,比較穩定
包與模塊:有package.json文件的文件/目錄就可以是一個包
元數據:描述自身的數據
package.json文件中name與version為必需
2018 年了,你還是只會 npm install 嗎?
淘寶npm鏡像使用方法
1.臨時使用
npm --registry https://registry.npm.taobao.org install express
2.持久使用
npm config set registry https://registry.npm.taobao.org
使用npm踩過的坑
Windows下的Nodejs npm路徑是Users下appdata,修改路徑方法為
prefix = D:\nodejs\node_global
cache = D:\nodejs\node_global
我們在使用 npm install 安裝模塊的模塊的時候 ,一般會使用下面這幾種命令形式:
npm install moduleName # 安裝模塊到項目目錄下
npm install -g moduleName # -g 的意思是將模塊安裝到全局,具體安裝到磁盤哪個位置,要看 npm config prefix 的位置。
npm install -save moduleName # -save 的意思是將模塊安裝到項目目錄下,并在package文件的dependencies節點寫入依賴。
npm install -save-dev moduleName # -save-dev 的意思是將模塊安裝到項目目錄下,并在package文件的devDependencies節點寫入依賴。
那么問題來了,在項目中我們應該使用四個命令中的哪個呢?這個就要視情況而定了。下面對這四個命令進行對比,看完后你就不再這么問了。
npm install moduleName 命令
- 安裝模塊到項目node_modules目錄下。
- 不會將模塊依賴寫入devDependencies或dependencies 節點。
- 運行 npm install 初始化項目時不會下載模塊。
- npm install -g moduleName 命令
全局安裝后可以作為命令行工具使用
- 安裝模塊到全局,不會在項目node_modules目錄中保存模塊包。
- 不會將模塊依賴寫入devDependencies或dependencies 節點。
- 運行 npm install 初始化項目時不會下載模塊。
- npm install -save moduleName 命令
npm5以上可以不加,默認
- 安裝模塊到項目node_modules目錄下。
- 會將模塊依賴寫入dependencies 節點。
- 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
- 運行npm install --production或者注明NODE_ENV變量值為production時,會自動下載模塊到node_modules目錄中。
- npm install -save-dev moduleName 命令或 -D
- 安裝模塊到項目node_modules目錄下。
- 會將模塊依賴寫入devDependencies 節點。
- 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
- 運行npm install --production或者注明NODE_ENV變量值為production時,不會自動下載模塊到node_modules目錄中。
總結
devDependencies 節點下的模塊是我們在開發時需要用的,比如項目中使用的 gulp ,壓縮css、js的模塊。這些模塊在我們的項目部署后是不需要的,所以我們可以使用 -save-dev 的形式安裝。像 express 這些模塊是項目運行必備的,應該安裝在 dependencies 節點下,所以我們應該使用 -save 的形式安裝。
npm install packagename 0.0.1
安裝指定版本的模塊
npm init
這個命令會在當前目錄生成一個package.json文件,這個文件中會記錄一些關于項目的信息,比如:項目的作者,git地址,入口文件、命令設置、項目名稱和版本號等等,一般情況下這個文件是必須要有的,方便后續的項目添加和其他開發人員的使用。
npm install packagename --save 或 -S
--save、-S參數意思是把模塊的版本信息保存到dependencies(生產環境依賴)中,即你的package.json文件的dependencies字段中;
npm install packagename --save-dev 或 -D
--save-dev 、 -D參數意思是把模塊版本信息保存到devDependencies(開發環境依賴)中,即你的package.json文件的devDependencies字段中;
npm install packagename --save-optional 或 -O
--save-optional 、 -O參數意思是把模塊安裝到optionalDependencies(可選環境依賴)中,即你的package.json文件的optionalDependencies字段中。
npm install packagename --save-exact 或 -E
--save-exact 、 -E參數的意思是精確的安裝指定版本的模塊,細心的同學會發現dependencies字段里每個模塊版本號前面的^不見鳥。。。
如果你打開的是別人的項目,這個時候一般是沒有任何依賴包的,但是所有需要的包已在package.json里面寫好了,這個時候我們就可以使用npm install來安裝所有項目中需要的依賴包了
npm install packagename -g 或 --global
安裝全局的模塊(不加參數的時候默認安裝本地模塊)
npm list 或 npm ll 或 npm la 或 npm ls
查看所有已經安裝的模塊 ll 、 ls 、 la 三個命令意思都一樣 但是列表的展示方式不一樣 喜歡用哪個就看個人喜好了,不懂的同學可以每個都去試下。
npm uninstall packagename [options]
卸載已經安裝的模塊,后面的options參數意思與安裝時候的意思一樣,與這個命令相同的還有npm remove 、npm rm、npm r 、 npm un 、 npm unlink 這幾個命令功能和npm uninstall基本一樣,個人覺得沒什么區別。
npm outdated
這個命令會列出所有已經過時了的模塊,對于已經過時了的模塊可以使用下面的命令去更新
npm update [-g]
更新已經安裝的模塊(或全局的模塊)
npm help '命令'
查看某條命令的詳細幫助
npm root
查看命令的絕對路徑
npm config
設置npm命令的配置路徑,這個命令一般用于設置代理,畢竟大部分都是國外的模塊,不過個人還是比較喜歡用cnpm 這個命令是用的淘寶的鏡像,用法與npm一樣,速度還可以。
除去以上的這些命令外,經常還能見到一些npm start、npm deploy、 npm build等等之類的命令,這些一般都是在package.json 中自定義的一些啟動、重啟、停止服務之類的命令。可以在package.json文件的scripts字段里自定義。例如:
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"build": "webpack",
"start": "webpack-dev-server main.js,
"deploy": "set NODE_ENV=production"
}
npm緩存命令
npm cache 提供了三個命令,分別是npm cache add
, npm cache clean
, npm cache verify
。
npm cache add
官方解釋說這個命令主要是 npm 內部使用,但是也可以用來手動給一個指定的 package 添加緩存。(This command is primarily intended to be used internally by npm, but it can provide a way to add data to the local installation cache explicitly.)
npm cache clean
刪除緩存目錄下的所有數據。從 npm@5 開始,為了保證緩存數據的有效性和完整性,需要加上 --force
參數。
npm cache verify
驗證緩存數據的有效性和完整性,清理垃圾數據。
npm 的緩存是使用 pacote 模塊進行下載和管理,基于 cacache 緩存存儲。由于 npm 會維護緩存數據的完整性,一旦數據發生錯誤,就回重新獲取。因此不推薦手動清理緩存,除非需要釋放磁盤空間,這也是要強制加上 --force
參數的原因
npm離線安裝
npm 提供了離線安裝模式,使用 --offline, --prefer-offline, --prefer-online 可以指定離線模式。
--prefer-offline / --prefer-online
“離線優先/網絡優先”模式。
如果設置為--prefer-offline
則優先使用緩存數據,如果沒有匹配的緩存數據,則從遠程倉庫下載。
如果設置為--prefer-online
則優先使用網絡數據,忽略緩存數據,這種模式可以及時獲取最新的模塊。
--offline
完全離線模式,安裝過程不需要網絡,直接使用匹配的緩存數據,一旦緩存數據不存在,則安裝失敗。
yarn global
不像 npm , 全局操作在使用 -g 或者 --global 標志的命令的時候執行,Yarn 命令需要帶有 global 前綴。跟 npm 一樣,特定項目的依賴不需要全局安裝。
global 前綴只對 yarn add, yarn bin,yarn ls 和 yara remove 有效。除了 yarn add,這些命令跟 npm 的是等價的。
yarn緩存命令
yarn cache 提供了三個命令,分別是yarn cache ls
, yarn cache dir
, yarn cache clean
。
yarn cache ls
列出當前緩存的包列表。
yarn cache dir
顯示緩存數據的目錄。
yarn cache clean
清除所有緩存數據。