簡體   English   中英

在npm安裝期間如何忽略作用域軟件包的node_modules /目錄?

[英]How to ignore scoped packages' node_modules/ directory during npm install?

我有一個包含package.json的存儲庫,其中包含范圍內的依賴項。 我還有一個.npmignore文件,打算將dist/所有文件和子目錄列入白名單。 問題是在運行npm install @private/a另一個存儲庫時,包括了所有作用域的依賴項。 這包括私有npm軟件包和公共軟件包,例如@uirouter。

package.json:

   {
      "name": "@private/a",
      "version": "1.0.0",
      "description": "",
      "main": "dist/index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "repository": {
        "type": "git",
        "url": "git+ssh://git@bitbucket.org/private/a.git"
      },
      "author": "",
      "license": "ISC",
      "homepage": "https://bitbucket.org/private/a#readme",
      "devDependencies": {
        "gulp": "^3.9.1",
        "gulp-angular-embed-templates": "^2.3.0",
        "gulp-concat": "^2.6.1",
        "gulp-jshint": "^2.0.4",
        "gulp-rename": "^1.2.2",
        "gulp-sass": "^3.0.0",
        "gulp-uglify": "^2.0.0",
        "jshint": "^2.9.4"
      },
      "dependencies": {
        "@private/b": "^1.0.0",
        "@private/c": "^1.0.0"
      }
    }

.npmignore

**
!dist/**

盡管有這兩個文件,當我在另一個存儲庫中運行npm install @private/a --save ,它npm install @private/a --save安裝依賴項及其所有范圍內的依賴項:

/node_modules/@private/a/dist/index.js
/node_modules/dist/css/styles.css
/node_modules/@private/a/node_modules/@private/b
/node_modules/@private/a/node_modules/@private/c
package.json

只能是這樣:

/node_modules/@private/a/dist/index.js
/node_modules/dist/css/styles.css
package.json

我該如何實現? 我嘗試過.npmignore不同變體,但沒有任何運氣。

.npmignore與您要執行的操作無關。 該文件僅決定您的npm軟件包代碼的哪些部分最終出現在npm注冊表中。 因此,它按廣告宣傳工作。

您的問題可能出在您的npmconfig中,或者是因為使用的是npm的舊版本。 最新版本的安裝方式如下:

/node_modules/@private/a/dist/index.js
/node_modules/@private/b/...
/node_modules/@private/c/...
package.json

我已經驗證了最新的npm正在發生這種情況。 但是曾經有一段時間npm將依賴項安裝到嵌套結構中。 例如參見。 所以我建議:

  1. 確保您擁有最新的節點和npm。
  2. 確保您的npm配置未強制進行舊式捆綁。 運行npm get legacy-bundling 確保這是錯誤的。

在少數情況下,即使使用最新的npm,依存關系的嵌套也會合法發生。 看到這個 但是我猜你的問題不是由於這個。 您只需在一個空文件夾中執行npm install @private/a即可進行測試。

Node將安裝您的軟件包文件以及在dependencies字段下聲明的所有dependencies

依賴關系樹的構建方式取決於您使用的npm版本。

如果您的程序包不需要運行這些依賴項,則意味着它們只是開發依賴項,您可以在devDependencies字段中安全地列出它們。

僅在插件目錄中運行npm install時才安裝Dev依賴項。

您需要鎖定依賴性。 您可能要簽出npm shrinkwrap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM