npm 包安裝位置

yuanhjty發表於2019-03-26

官方文件:docs.npmjs.com/files/folde…

全域性包安裝位置

  • Unix

    npm install -g package # -> `{prefix}/lib/node_modules/package`
    
    # 為可執行檔案在 `{prefix}/bin/` 目錄中建立連結
    複製程式碼
  • Windows: {prefix}/node_modules/

    npm install -g package # -> `{prefix}/node_modules/package`
    
    # 為可執行檔案在 `{prefix}/` 目錄中建立連結
    複製程式碼

prefix: docs.npmjs.com/misc/config…

區域性包安裝位置

當執行 npm install foo@1.2.3 時:

  1. npm 從當前工作目錄開始,在目錄樹中向上(父目錄方向)查詢:

    • 直到找到一個包含 package.json 檔案或者 node_modules 目錄的目錄,則以該目錄為 package_root,並停止查詢。

    • 如果沒有找到包含 package.json 檔案或者 node_modules 目錄的目錄,則以當前工作目錄為 package_root

  2. 安裝 foo 包

    1. 將 foo 包的內容拷貝到 {package_root}/node_modules/foo

    2. {package_root}/node_modules/.bin/ 下建立相關可執行檔案的連結。

  3. 安裝 foo 包的依賴包

    假設 foo 包依賴 bar@1.2.3

    1. 如果 {package_root}/node_modules/ 中已經安裝了 bar@1.2.3,則不再安裝 bar@1.2.3

    2. 如果 {package_root}/node_modules/ 中已經安裝了與bar@1.2.3 不同版本的 bar 包,則在 {package_root}/node_modules/foo/node_modules/ 目錄中安裝 bar@1.2.3

    3. 如果 {package_root}/node_modules/ 中還沒有安裝任何版本的 bar 包,則在 {package_root}/node_modules/ 中安裝 bar@1.2.3

  4. 按 (3) 中的方法遞迴安裝依賴包的依賴包。

scoped 包安裝位置

對於 scoped 包,假設安裝 @myorg/foo@1.2.3,與安裝非 scoped 包 foo@1.2.3 相比,只是在 foonode_modules 中間多了一層 @myorg 目錄:

  • npm install foo@1.2.3 -> .../node_modules/foo
  • npm install @myorg/foo@1.2.3 -> .../node_modules/@myorg/foo

相關文章