npm

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 命令

  1. 安裝模塊到項目node_modules目錄下。
  2. 不會將模塊依賴寫入devDependencies或dependencies 節點。
  3. 運行 npm install 初始化項目時不會下載模塊。
  • npm install -g moduleName 命令
    全局安裝后可以作為命令行工具使用
  1. 安裝模塊到全局,不會在項目node_modules目錄中保存模塊包。
  2. 不會將模塊依賴寫入devDependencies或dependencies 節點。
  3. 運行 npm install 初始化項目時不會下載模塊。
  • npm install -save moduleName 命令
    npm5以上可以不加,默認
  1. 安裝模塊到項目node_modules目錄下。
  2. 會將模塊依賴寫入dependencies 節點。
  3. 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
  4. 運行npm install --production或者注明NODE_ENV變量值為production時,會自動下載模塊到node_modules目錄中。
  • npm install -save-dev moduleName 命令或 -D
  1. 安裝模塊到項目node_modules目錄下。
  2. 會將模塊依賴寫入devDependencies 節點。
  3. 運行 npm install 初始化項目時,會將模塊下載到項目目錄下。
  4. 運行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

清除所有緩存數據。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,262評論 2 36
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發工具...
    build1024閱讀 7,940評論 0 9
  • 大家好,我是IT修真院深圳分院第3期的學員,一枚正直純潔善良的前端程序員,今天給大家分享一下,修真院官網前端工程師...
    大大頭大閱讀 2,968評論 0 1
  • 2018-2 《槍炮病菌與鋼鐵》的作者戴蒙德說:“歷史上的國家和社會衰敗,更多的只是影響到自己。而今天任何一個國家...
    王賀8228閱讀 187評論 0 0
  • 今天2017年3月24 周五 北京有雨 今天是我第一次寫“簡書”完全是因為我親愛的同事劉姐的不斷推薦 我的同事劉姐...
    明媚的醒悟閱讀 153評論 0 0