Как игнорировать каталог node_modules/с ограниченным набором пакетов во время установки npm?
У меня есть репозиторий, содержащий 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://[email protected]/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
в другом репозитории, он устанавливает зависимость вместе со всеми ее зависимыми зависимостями:
/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
, но мне не повезло.
Ответы
Ответ 1
.npmignore
не имеет никакого отношения к тому, что вы пытаетесь сделать. Этот файл только решает, какие части вашего кода пакета npm попадают в реестр npm. Поэтому он работает как рекламируемый.
Ваша проблема должна быть в вашем npmconfig или из-за использования более старой версии npm. Последняя версия устанавливает материал так:
/node_modules/@private/a/dist/index.js
/node_modules/@private/b/...
/node_modules/@private/c/...
package.json
Я проверил, что это происходит с последней версией npm. Но было время, когда npm устанавливала зависимости во вложенную структуру. См. это, например,. Поэтому я предлагаю:
- Убедитесь, что у вас есть последние node и npm.
- Убедитесь, что ваша конфигурация npm не приводит к устаревшему пакету. Запустите
npm get legacy-bundling
. Убедитесь, что это неверно.
Есть несколько случаев, когда вложение зависимостей происходит законно даже с последней версией npm. См. . Но я предполагаю, что ваша проблема связана не с этим. Вы можете протестировать, просто сделав npm install @private/a
в пустой папке.
Ответ 2
Node установит ваши файлы пакетов вместе со всеми зависимостями, объявленными в поле dependencies
.
Как создается дерево зависимостей, зависит от того, какую версию npm
вы используете.
Если вашему пакету не нужны эти зависимости для запуска, это означает, что они являются только зависимыми от разработчиков, и вы можете смело перечислить их в поле devDependencies
.
зависимости Dev устанавливаются только при запуске npm install
внутри каталога плагинов.
Ответ 3
Вам нужно заблокировать свою зависимость. Возможно, вы захотите проверить npm shrinkwrap
.