官方文檔:docs.npmjs.com/files/folde…node
Unixnpm
npm install -g package # -> `{prefix}/lib/node_modules/package`
# 爲可執行文件在 `{prefix}/bin/` 目錄中建立連接
複製代碼
Windows: {prefix}/node_modules/
json
npm install -g package # -> `{prefix}/node_modules/package`
# 爲可執行文件在 `{prefix}/` 目錄中建立連接
複製代碼
prefix: docs.npmjs.com/misc/config…bash
當執行 npm install foo@1.2.3
時:spa
npm 從當前工做目錄開始,在目錄樹中向上(父目錄方向)查找:code
直到找到一個包含 package.json 文件或者 node_modules 目錄的目錄,則以該目錄爲 package_root
,並中止查找。遞歸
若是沒有找到包含 package.json 文件或者 node_modules 目錄的目錄,則以當前工做目錄爲 package_root
。文檔
安裝 foo 包get
將 foo 包的內容拷貝到 {package_root}/node_modules/foo
。class
在 {package_root}/node_modules/.bin/
下建立相關可執行文件的連接。
安裝 foo 包的依賴包
假設 foo 包依賴 bar@1.2.3
若是 {package_root}/node_modules/
中已經安裝了 bar@1.2.3
,則再也不安裝 bar@1.2.3
。
若是 {package_root}/node_modules/
中已經安裝了與bar@1.2.3
不一樣版本的 bar 包,則在 {package_root}/node_modules/foo/node_modules/
目錄中安裝 bar@1.2.3
。
若是 {package_root}/node_modules/
中尚未安裝任何版本的 bar 包,則在 {package_root}/node_modules/
中安裝 bar@1.2.3
。
按 (3) 中的方法遞歸安裝依賴包的依賴包。
對於 scoped 包,假設安裝 @myorg/foo@1.2.3
,與安裝非 scoped 包 foo@1.2.3
相比,只是在 foo
和 node_modules
中間多了一層 @myorg
目錄:
npm install foo@1.2.3
-> .../node_modules/foo
npm install @myorg/foo@1.2.3
-> .../node_modules/@myorg/foo