Node.js 如何忽略范围包';npm安装期间的节点\模块/目录?

Node.js 如何忽略范围包';npm安装期间的节点\模块/目录?,node.js,npm,Node.js,Npm,我有一个存储库,其中包含一个package.json,其中包含作用域依赖项。我还有一个.npmignore文件,用于在dist/中列出所有文件和子目录。问题是,在运行另一个存储库时,npm install@private/a。这包括私有npm包和公共包,如@uirouter package.json: { "name": "@private/a", "version": "1.0.0", "description": "", "main":

我有一个存储库,其中包含一个
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"
      }
    }
N.米格诺尔先生

**
!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将依赖项安装到嵌套结构中。看见因此,我建议:

  • 确保您拥有最新的节点和npm
  • 确保您的npm配置没有强制旧式绑定。运行
    npm获取旧版捆绑
    。确保这是假的

  • 即使使用最新的npm,也很少有依赖项嵌套合法发生的情况。看见但我猜你的问题不是因为这个。您只需在一个空文件夹中执行
    npm install@private/a
    即可进行测试。

    节点将安装您的软件包文件以及
    dependencies
    字段下声明的所有依赖项

    依赖关系树的构建方式取决于您使用哪个版本的
    npm

    如果您的包不需要运行这些依赖项,这意味着它们只是开发依赖项,您可以安全地将它们列在
    devDependencies
    字段下


    只有在插件目录中运行
    npm安装时才会安装开发依赖项。

    是运行包
    @private/a
    所需的
    @private/b
    @private/c
    吗?还是只有在
    @private/a
    开发和构建过程中才需要它们?这就是问题所在,谢谢!我使用的是npm版本3,在版本5中,这不再是一个问题。