npm 使用注意

2.6.1 npm init

使用 npm init 初始化一個空項目是一個好的習慣强重,即使你對 package.json 及其他屬性非常熟悉,npm init 也是你開始寫新的 Node.js 應用或模塊的一個快捷的辦法佃声。npm init 有智能的默認選項十拣,比如從根目錄名稱推斷模塊名稱,通過 ~/.npmrc 讀取你的信息夭问,用你的 Git 設置來確定 repository 等等缰趋。

2.6.2 npm install

npm install 是我們最常用的 npm 命令之一秘血,因此我們需要好好了解下這個命令。終端輸入 npm install -h 查看使用方式:

可以看出:我們通過 npm install 可以安裝 npm 上發(fā)布的某個版本谋竖、某個tag蓖乘、某個版本區(qū)間的模塊嘉抒,甚至可以安裝本地目錄些侍、壓縮包和 git/github 的庫作為依賴政模。

小提示: npm inpm install 的簡寫耗式,建議使用 npm i

直接使用 npm i 安裝的模塊是不會寫入 package.json 的 dependencies (或 devDependencies)刊咳,需要額外加個參數(shù):

  1. npm i express --save/npm i express -S (安裝 express彪见,同時將 "express": "^4.14.0" 寫入 dependencies )
  2. npm i express --save-dev/npm i express -D (安裝 express,同時將 "express": "^4.14.0" 寫入 devDependencies )
  3. npm i express --save --save-exact (安裝 express娱挨,同時將 "express": "4.14.0" 寫入 dependencies )

第三種方式將固定版本號寫入 dependencies余指,建議線上的 Node.js 應用都采取這種鎖定版本號的方式,因為你不可能保證第三方模塊下個小版本是沒有驗證 bug 的跷坝,即使是很流行的模塊酵镜。拿 Mongoose 來說,Mongoose 4.1.4 引入了一個 bug 導致調用一個文檔 entry 的 remove 會刪除整個集合的文檔,見:https://github.com/Automattic/mongoose/blob/master/History.md#415--2015-09-01吝沫。

后面會介紹更安全的 npm shrinkwrap 的用法。

運行以下命令:

npm config set save-exact true

這樣每次 npm i xxx --save 的時候會鎖定依賴的版本號,相當于加了 --save-exact 參數(shù)经柴。

小提示:npm config set 命令將配置寫到了 ~/.npmrc 文件,運行 npm config list 查看播急。

2.6.3 npm scripts

npm 提供了靈活而強大的 scripts 功能绍些,見 官方文檔

npm 的 scripts 有一些內置的縮寫命令,如常用的:

  • npm start 等價于 npm run start
  • npm test 等價于 npm run test

2.6.4 npm shrinkwrap

前面說過要鎖定依賴的版本上沐,但這并不能完全防止意外情況的發(fā)生硫眯,因為鎖定的只是最外一層的依賴净宵,而里層依賴的模塊的 package.json 有可能寫的是 "mongoose": "*"。為了徹底鎖定依賴的版本,讓你的應用在任何機器上安裝的都是同樣版本的模塊(不管嵌套多少層),通過運行 npm shrinkwrap,會在當前目錄下產生一個 npm-shrinkwrap.json呛讲,里面包含了通過 node_modules 計算出的模塊的依賴樹及版本芽偏。上面的截圖也顯示:只要目錄下有 npm-shrinkwrap.json 則運行 npm install 的時候會優(yōu)先使用 npm-shrinkwrap.json 進行安裝,沒有則使用 package.json 進行安裝。

更多閱讀:

  1. https://docs.npmjs.com/cli/shrinkwrap
  2. http://tech.meituan.com/npm-shrinkwrap.html

注意: 如果 node_modules 下存在某個模塊(如直接通過 npm install xxx 安裝的)而 package.json 中沒有,運行 npm shrinkwrap 則會報錯。另外蘑险,npm shrinkwrap 只會生成 dependencies 的依賴,不會生成 devDependencies 的堆缘。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末缀皱,一起剝皮案震驚了整個濱河市钮莲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叛赚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異随闪,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門青自,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹锄,“玉大人吻育,你說我怎么就攤上這事砾层”ψ伲” “怎么了颤芬?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵汰具,是天一觀的道長卓鹿。 經常有香客問我吟孙,道長杰妓,這世上最難降的妖魔是什么倍宾? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任变过,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己毡惜,他們只是感情好拓轻,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著经伙,像睡著了一般扶叉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帕膜,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天枣氧,我揣著相機與錄音,去河邊找鬼垮刹。 笑死达吞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的危纫。 我是一名探鬼主播宗挥,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼种蝶!你這毒婦竟也來了契耿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤螃征,失蹤者是張志新(化名)和其女友劉穎搪桂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯滚,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡踢械,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了魄藕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片内列。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖背率,靈堂內的尸體忽然破棺而出话瞧,到底是詐尸還是另有隱情,我是刑警寧澤寝姿,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布交排,位于F島的核電站,受9級特大地震影響饵筑,放射性物質發(fā)生泄漏埃篓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一根资、第九天 我趴在偏房一處隱蔽的房頂上張望架专。 院中可真熱鬧同窘,春花似錦、人聲如沸胶征。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睛低。三九已至案狠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钱雷,已是汗流浹背骂铁。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罩抗,地道東北人拉庵。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像套蒂,于是被迫代替她去往敵國和親钞支。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容

  • 什么是 NPM npm之于Node操刀,就像pip之于Python,gem之于Ruby,composer之于PHP烁挟。 ...
    ihoey閱讀 6,250評論 2 36
  • 原文地址:https://tech.meituan.com/npm-shrinkwrap.html 在一次項目開發(fā)...
    RiverSouthMan閱讀 1,274評論 0 0
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發(fā)工具...
    build1024閱讀 7,876評論 0 9
  • JavaScript 模塊化編程 網站越來越復雜骨坑,js代碼撼嗓、js文件也越來越多,會遇到什么問題欢唾? 命名沖突且警; 文件...
    magic_pill閱讀 1,420評論 0 1
  • 綠色的眼 半截的尾 誰知你是一只一萬美元的貓 唯一的天朝品牌 流浪在窗臺 這一切若出于你,我便默然不語礁遣。 你是否知...
    Sisi_1204閱讀 597評論 0 50