我有一个包含package.json
的存储库,其中包含范围内的依赖项。我还有一个.npmignore
文件,打算将dist/
中的所有文件和子目录列入白名单。问题是,在其他存储库中运行npm install @private/a
时,将包括所有范围内的依赖项。这包括私有(private)npm软件包和公共(public)软件包(例如@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
时,它仍在安装依赖项及其所有范围内的依赖项:/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将依赖项安装到嵌套结构中。参见this for example。所以我建议:
npm get legacy-bundling
。确保这是错误的。 在少数情况下,即使使用最新的npm,依存关系的嵌套也会合法发生。参见this。但是我猜你的问题不是由于这个。您只需在一个空文件夹中执行
npm install @private/a
即可进行测试。