npm

NPM依賴包版本號(hào)~和^和*的區(qū)別:

~ 會(huì)匹配最近的小版本依賴包,比如~1.2.3會(huì)匹配所有1.2.x版本,但是不包括1.3.0
^ 會(huì)匹配最新的大版本依賴包,比如^1.2.3會(huì)匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0

  • 這意味著安裝最新版本的依賴包
    推薦使用~,只會(huì)修復(fù)版本的bug,比較穩(wěn)定

包與模塊:有package.json文件的文件/目錄就可以是一個(gè)包
元數(shù)據(jù):描述自身的數(shù)據(jù)
package.json文件中name與version為必需
2018 年了,你還是只會(huì) npm install 嗎?

淘寶npm鏡像使用方法
1.臨時(shí)使用

npm --registry https://registry.npm.taobao.org install express

2.持久使用

npm config set registry https://registry.npm.taobao.org

使用npm踩過(guò)的坑
Windows下的Nodejs npm路徑是Users下appdata,修改路徑方法為
prefix = D:\nodejs\node_global
cache = D:\nodejs\node_global
我們?cè)谑褂?npm install 安裝模塊的模塊的時(shí)候 ,一般會(huì)使用下面這幾種命令形式:

  • npm install moduleName # 安裝模塊到項(xiàng)目目錄下

  • npm install -g moduleName # -g 的意思是將模塊安裝到全局,具體安裝到磁盤(pán)哪個(gè)位置,要看 npm config prefix 的位置。

  • npm install -save moduleName # -save 的意思是將模塊安裝到項(xiàng)目目錄下,并在package文件的dependencies節(jié)點(diǎn)寫(xiě)入依賴。

  • npm install -save-dev moduleName # -save-dev 的意思是將模塊安裝到項(xiàng)目目錄下,并在package文件的devDependencies節(jié)點(diǎn)寫(xiě)入依賴。
    那么問(wèn)題來(lái)了,在項(xiàng)目中我們應(yīng)該使用四個(gè)命令中的哪個(gè)呢?這個(gè)就要視情況而定了。下面對(duì)這四個(gè)命令進(jìn)行對(duì)比,看完后你就不再這么問(wèn)了。

npm install moduleName 命令

  1. 安裝模塊到項(xiàng)目node_modules目錄下。
  2. 不會(huì)將模塊依賴寫(xiě)入devDependencies或dependencies 節(jié)點(diǎn)。
  3. 運(yùn)行 npm install 初始化項(xiàng)目時(shí)不會(huì)下載模塊。
  • npm install -g moduleName 命令
    全局安裝后可以作為命令行工具使用
  1. 安裝模塊到全局,不會(huì)在項(xiàng)目node_modules目錄中保存模塊包。
  2. 不會(huì)將模塊依賴寫(xiě)入devDependencies或dependencies 節(jié)點(diǎn)。
  3. 運(yùn)行 npm install 初始化項(xiàng)目時(shí)不會(huì)下載模塊。
  • npm install -save moduleName 命令
    npm5以上可以不加,默認(rèn)
  1. 安裝模塊到項(xiàng)目node_modules目錄下。
  2. 會(huì)將模塊依賴寫(xiě)入dependencies 節(jié)點(diǎn)。
  3. 運(yùn)行 npm install 初始化項(xiàng)目時(shí),會(huì)將模塊下載到項(xiàng)目目錄下。
  4. 運(yùn)行npm install --production或者注明NODE_ENV變量值為production時(shí),會(huì)自動(dòng)下載模塊到node_modules目錄中。
  • npm install -save-dev moduleName 命令或 -D
  1. 安裝模塊到項(xiàng)目node_modules目錄下。
  2. 會(huì)將模塊依賴寫(xiě)入devDependencies 節(jié)點(diǎn)。
  3. 運(yùn)行 npm install 初始化項(xiàng)目時(shí),會(huì)將模塊下載到項(xiàng)目目錄下。
  4. 運(yùn)行npm install --production或者注明NODE_ENV變量值為production時(shí),不會(huì)自動(dòng)下載模塊到node_modules目錄中。

總結(jié)
devDependencies 節(jié)點(diǎn)下的模塊是我們?cè)陂_(kāi)發(fā)時(shí)需要用的,比如項(xiàng)目中使用的 gulp ,壓縮css、js的模塊。這些模塊在我們的項(xiàng)目部署后是不需要的,所以我們可以使用 -save-dev 的形式安裝。像 express 這些模塊是項(xiàng)目運(yùn)行必備的,應(yīng)該安裝在 dependencies 節(jié)點(diǎn)下,所以我們應(yīng)該使用 -save 的形式安裝。

npm install packagename 0.0.1
安裝指定版本的模塊

npm init
這個(gè)命令會(huì)在當(dāng)前目錄生成一個(gè)package.json文件,這個(gè)文件中會(huì)記錄一些關(guān)于項(xiàng)目的信息,比如:項(xiàng)目的作者,git地址,入口文件、命令設(shè)置、項(xiàng)目名稱和版本號(hào)等等,一般情況下這個(gè)文件是必須要有的,方便后續(xù)的項(xiàng)目添加和其他開(kāi)發(fā)人員的使用。

npm install packagename --save 或 -S
--save、-S參數(shù)意思是把模塊的版本信息保存到dependencies(生產(chǎn)環(huán)境依賴)中,即你的package.json文件的dependencies字段中;

npm install packagename --save-dev 或 -D
--save-dev 、 -D參數(shù)意思是把模塊版本信息保存到devDependencies(開(kāi)發(fā)環(huán)境依賴)中,即你的package.json文件的devDependencies字段中;

npm install packagename --save-optional 或 -O
--save-optional 、 -O參數(shù)意思是把模塊安裝到optionalDependencies(可選環(huán)境依賴)中,即你的package.json文件的optionalDependencies字段中。

npm install packagename --save-exact 或 -E
--save-exact 、 -E參數(shù)的意思是精確的安裝指定版本的模塊,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)dependencies字段里每個(gè)模塊版本號(hào)前面的^不見(jiàn)鳥(niǎo)。。。

如果你打開(kāi)的是別人的項(xiàng)目,這個(gè)時(shí)候一般是沒(méi)有任何依賴包的,但是所有需要的包已在package.json里面寫(xiě)好了,這個(gè)時(shí)候我們就可以使用npm install來(lái)安裝所有項(xiàng)目中需要的依賴包了

npm install packagename -g 或 --global
安裝全局的模塊(不加參數(shù)的時(shí)候默認(rèn)安裝本地模塊)

npm list 或 npm ll 或 npm la 或 npm ls
查看所有已經(jīng)安裝的模塊 ll 、 ls 、 la 三個(gè)命令意思都一樣 但是列表的展示方式不一樣 喜歡用哪個(gè)就看個(gè)人喜好了,不懂的同學(xué)可以每個(gè)都去試下。

npm uninstall packagename [options]
卸載已經(jīng)安裝的模塊,后面的options參數(shù)意思與安裝時(shí)候的意思一樣,與這個(gè)命令相同的還有npm remove 、npm rm、npm r 、 npm un 、 npm unlink 這幾個(gè)命令功能和npm uninstall基本一樣,個(gè)人覺(jué)得沒(méi)什么區(qū)別。

npm outdated
這個(gè)命令會(huì)列出所有已經(jīng)過(guò)時(shí)了的模塊,對(duì)于已經(jīng)過(guò)時(shí)了的模塊可以使用下面的命令去更新

npm update [-g]
更新已經(jīng)安裝的模塊(或全局的模塊)

npm help '命令'
查看某條命令的詳細(xì)幫助

npm root
查看命令的絕對(duì)路徑

npm config
設(shè)置npm命令的配置路徑,這個(gè)命令一般用于設(shè)置代理,畢竟大部分都是國(guó)外的模塊,不過(guò)個(gè)人還是比較喜歡用cnpm 這個(gè)命令是用的淘寶的鏡像,用法與npm一樣,速度還可以。

除去以上的這些命令外,經(jīng)常還能見(jiàn)到一些npm start、npm deploy、 npm build等等之類的命令,這些一般都是在package.json 中自定義的一些啟動(dòng)、重啟、停止服務(wù)之類的命令??梢栽趐ackage.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 提供了三個(gè)命令,分別是npm cache add, npm cache clean, npm cache verify。

npm cache add

官方解釋說(shuō)這個(gè)命令主要是 npm 內(nèi)部使用,但是也可以用來(lái)手動(dòng)給一個(gè)指定的 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

刪除緩存目錄下的所有數(shù)據(jù)。從 npm@5 開(kāi)始,為了保證緩存數(shù)據(jù)的有效性和完整性,需要加上 --force 參數(shù)。

npm cache verify

驗(yàn)證緩存數(shù)據(jù)的有效性和完整性,清理垃圾數(shù)據(jù)。

npm 的緩存是使用 pacote 模塊進(jìn)行下載和管理,基于 cacache 緩存存儲(chǔ)。由于 npm 會(huì)維護(hù)緩存數(shù)據(jù)的完整性,一旦數(shù)據(jù)發(fā)生錯(cuò)誤,就回重新獲取。因此不推薦手動(dòng)清理緩存,除非需要釋放磁盤(pán)空間,這也是要強(qiáng)制加上 --force 參數(shù)的原因

npm離線安裝

npm 提供了離線安裝模式,使用 --offline, --prefer-offline, --prefer-online 可以指定離線模式。

--prefer-offline / --prefer-online
“離線優(yōu)先/網(wǎng)絡(luò)優(yōu)先”模式。

如果設(shè)置為--prefer-offline 則優(yōu)先使用緩存數(shù)據(jù),如果沒(méi)有匹配的緩存數(shù)據(jù),則從遠(yuǎn)程倉(cāng)庫(kù)下載。

如果設(shè)置為--prefer-online則優(yōu)先使用網(wǎng)絡(luò)數(shù)據(jù),忽略緩存數(shù)據(jù),這種模式可以及時(shí)獲取最新的模塊。

--offline
完全離線模式,安裝過(guò)程不需要網(wǎng)絡(luò),直接使用匹配的緩存數(shù)據(jù),一旦緩存數(shù)據(jù)不存在,則安裝失敗。

yarn global

不像 npm , 全局操作在使用 -g 或者 --global 標(biāo)志的命令的時(shí)候執(zhí)行,Yarn 命令需要帶有 global 前綴。跟 npm 一樣,特定項(xiàng)目的依賴不需要全局安裝。

global 前綴只對(duì) yarn add, yarn bin,yarn ls 和 yara remove 有效。除了 yarn add,這些命令跟 npm 的是等價(jià)的。

yarn緩存命令

yarn cache 提供了三個(gè)命令,分別是yarn cache ls, yarn cache dir, yarn cache clean

yarn cache ls

列出當(dāng)前緩存的包列表。

yarn cache dir

顯示緩存數(shù)據(jù)的目錄。

yarn cache clean

清除所有緩存數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,367評(píng)論 2 36
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發(fā)工具...
    build1024閱讀 8,145評(píng)論 0 9
  • 大家好,我是IT修真院深圳分院第3期的學(xué)員,一枚正直純潔善良的前端程序員,今天給大家分享一下,修真院官網(wǎng)前端工程師...
    大大頭大閱讀 3,060評(píng)論 0 1
  • 2018-2 《槍炮病菌與鋼鐵》的作者戴蒙德說(shuō):“歷史上的國(guó)家和社會(huì)衰敗,更多的只是影響到自己。而今天任何一個(gè)國(guó)家...
    王賀8228閱讀 204評(píng)論 0 0
  • 今天2017年3月24 周五 北京有雨 今天是我第一次寫(xiě)“簡(jiǎn)書(shū)”完全是因?yàn)槲矣H愛(ài)的同事劉姐的不斷推薦 我的同事劉姐...
    明媚的醒悟閱讀 209評(píng)論 0 0

友情鏈接更多精彩內(nèi)容