你也有可能會看見在 package.json 中模塊的版本號前面既沒有 ~
也沒有 ^
就像下面那樣:html
"moment": "2.4.0"
上面的狀況屬於精確安裝模塊指定的版本號。經過命令參數-E,或者 --save-exact
來指定版本號安裝的。上述模塊對應的精確安裝命令:npm install --save-exact moment@2.4.0
node
npm outdate
與第三方工具npm-check
npm outdate
此命令會列出項目中全部已通過時的包,像下面同樣:git
推薦使用檢查依賴包更強大的一個工具 npm-check,更強大分析包的能力以及能夠經過加上參數提供交互式更新方式,詳情請參考其文檔說明。安裝完成後npm-check
檢查項目依賴包,展現像下面同樣:github
dependencies(生產環境的依賴的包目錄)devDependencies(開發環境的依賴包目錄)npm
在項目的 package.json 使用命令 npm install --save moduel
安裝的模塊會註冊到 dependencies 目錄中去(npm 5 開始 經過npm install不加--save 和npm install --save同樣 都是局部安裝並會把模塊自動寫入package.json中的dependencies裏。)json
npm install --dev module
並會安裝模塊並自動寫入package.json中的 devDependencies 裏。gulp
當你 clone 下來了一個新項目在項目根目錄下執行npm install
的時候是會同時安裝 dependencies 和 devDependencies中的全部依賴。當你的項目須要在生產環境中只須要安裝 dependencies 中的依賴時,執行的是npm install --production
命令。(若是配置了NODE_ENV環境變量爲production,那麼執行npm install
就只安裝dependencies裏面的包。安裝完後能夠用npm ls查看安裝的包的狀況。)緩存
With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies.
此外,你還有可能看到形如:網絡
"optionalDependencies": { "gulp": "^3.9.1" }
optionalDependencies 是你在使用npm install npm install --save-optional gulp
是所註冊在可選依賴裏的模塊包,在項目執行npm install --no-optional
就能夠跳過可選包安裝。工具
Tips : 在存在 package-lock.json 時npm install --no-optional
你可能會發現依舊裝上了可選模塊,(它的issue頁討論),此時你可能還要加上另一個參數執行npm install --no-optional --no-package-lock
才能如願。
查看和管理npm的基礎配置。npm config ls -l
能夠經過npm config get proxy
查看你是否設置了npm 的代理。npm config set registry https://registry.npm.taobao.org
改爲更快的淘寶源,解決出現安裝不了模塊或者速度慢的問題。
當你使用命令 npm config get cache
命令時 你會獲得你的本地 npm 緩存的完整路徑,npm 緩存是什麼呢,能夠先從npm install的執行過程提及(此部分參考阮一峯老師的博客):
實際上說一個模塊安裝之後,本地其實保存了兩份。一份是~/.npm目錄下的壓縮包,另外一份是node_modules目錄下解壓後的代碼。可是,運行npm install
的時候,只會檢查 node_modules 目錄,而不會檢查~/.npm目錄。若是一個模塊在~/.npm下有壓縮包,可是沒有安裝在node_modules目錄中,npm 依然會從遠程倉庫下載一次新的壓縮包。
阮老師在當時文中提到的離線安裝時所說的有不少弊端的npm install --cache-min
命令已經在npm 5.0.0開始被 deprecated 了
--cache-min and --cache-max have been deprecated. (#15666)
咱們想利用已經在緩存中以前已經備份的模塊實現離線模塊安裝的的 cache 機制已經在V5的時候重寫了,緩存將由 npm 來全局維護再也不須要開發人員操心,離線安裝時將再也不嘗試鏈接網絡,而是降級嘗試從緩存中讀取,或直接失敗。就是若是你 offline ,npm將無縫地使用您的緩存。如下新增參數命令翻譯自npm v5.0.0的release
--prefer-offline
選項將使npm跳過任何有條件的請求(304檢查)過期的緩存數據,而且只有在緩存中丟失了某些內容時才能訪問網絡--prefer-online
選項,它將強制 npm 從新驗證緩存數據(使用304次檢查),忽略任何過期檢查,並用從新驗證的新數據刷新緩存。--offline
選項將強制npm使用緩存或退出。若是試圖安裝的任何內容還沒有存在於緩存中,它將報 ENOTCACHED錯誤。npm cache verify
命令,它將對你的緩存進行辣雞回收,減小不須要的東西佔據的磁盤使用量,而且會對索引和內容進行全面的完整性驗證。項目中若是是用 npm V5 以上版本就會有這麼一個詳細記錄安裝模塊的細節的文件。肯定當前安裝的包的依賴,以便後續從新安裝的時候生成相同的依賴,而忽略項目開發過程當中有些依賴已經發生的更新。
當你想經過搜索引擎瞭解package-lock.json 問題的時候,你可能會被「坑」字吸引過去,你可能會看到過「若是手動修改了 package.json 文件中已有模塊的版本,直接執行npm install不會安裝新指定的版本,只能經過npm install xxx@yy更新」 ,不過這是 V5.0.0 的問題,如今V5.4.2版本後若是改了package.json,且package.json和lock文件不一樣,那麼執行npm i
時npm會根據package中的版本號以及語義含義去下載最新的包,並更新至lock。詳見這個知乎回答。