npm install
是用來安裝項目所依賴的模塊的。當我們使用git clone
將線上項目下載到本地時,並沒有下載node_modules這個目錄。因爲它保存了項目所依賴的所有模塊,通常有幾百兆大。雖然我們沒有得到node_modules這個文件夾,但我們可以通過pakage.json這個文件的值項目所依賴的模塊。然後,運行npm install
來安裝pakage.json中dependencies下的所有模塊。npm install
<=>npm i
npm install
的後面還可以跟一些參數。(符號<=>表示等價)
npm intsall moduleName
表示安裝模塊到項目node_modules目錄下,不會將模塊依賴寫入pakage.json的devDependencies或dependencies中,這也就意味着,當別人git clone
你的項目時,不知道你依賴了這個模塊,運行npm install
時也不會下載這個模塊,所以當啓動項目時很有可能會報錯說某個模塊找不到。
npm install -g moduleName <=> npm install modulesName -g
表示安裝模塊到全局的node_modules文件夾下(也就是說你的電腦在安裝nodejs時指定的一個位置),該命令同樣不會把依賴寫入pakage.json,所以存在和上條同樣的問題。
npm install -save moduleName <=> npm install moduleName --save <=> npm install moduleName -S
表示安裝模塊到項目node_modules目錄下,會將模塊依賴寫入pakage.json的dependencies中。默認情況下,運行npm install
會將模塊下載到項目目錄下。
npm install -save-dev moduleName <=> npm install moduleName --save-dev <=> npm install moduleName -D
表示安裝模塊到項目node_modules目錄下,會將模塊依賴寫入pakage.json的devDependencies中。默認情況下,運行npm install
會將模塊下載到項目目錄下。
上面說到,默認情況下,運行npm install
會下載模塊,但是當運行npm install --production
或者註明NODE_ENV的值時production時,pakage.json中devDependencies中的模塊不會被自動下載。這是因爲,devDependencies中指定的模塊是在開發時需要用的,比如gulp,dependencies中指定的是項目運行必備的,比如express。
上面也有說到項目下的node_modules目錄和全局下的node_nodules目錄,他們在node搜索模塊的過程中優先級是不同的,如下圖所示。