在 npm 安装期间跳过特定模块

vit*_*y-t 4 npm

在我的开发项目中,我有package.json包含 3 组依赖项:

  • 来自公共 NPN 存储库的标准依赖项
  • 来自需要特定代理配置和权限的内部开发存储库的依赖项
  • 来自需要自己的代理和权限的内部财务存储库的依赖项

我们的构建集成机器是唯一一个能够拉取所有依赖项的设置,而所有开发机器都不能,这造成了依赖安装的噩梦。


是否可以在install命令中告诉 NPM安装所有除外,并提供package.json安装过程中要跳过的模块列表?

否则,考虑到使用所有权限设置所有代理是不现实的,处理这种情况的最佳方法是什么?

Мар*_*ров 6

您可以使用另一种方式,例如此处的官方文档中描述的“optionalDependencies”:

https://docs.npmjs.com/cli/v6/configuring-npm/package-json#optionaldependencies

例子:

{
  "dependencies": {
    "some-package-name-1": "1.0.0"
  },
  "devDependencies": {
    "some-package-name-2": "1.0.0"
  },
  "optionalDependencies": {
    "some-package-name-3": "1.0.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

并打电话

npm install --no-optional
Run Code Online (Sandbox Code Playgroud)

它将只安装以下内容:

some-package-name-1, some-package-name-2
Run Code Online (Sandbox Code Playgroud)


tab*_*dle 4

这里有一个超级迟到的回复:

简短的回答是否定的,npm 不是为此而设计的。这增加了 npm 不愿意支持的复杂性。话虽这么说,我写了一个包来做到这一点。

我的包是install-subset,可以全局安装npm install -g install-subset

要使用它,您可以在 package.json 中为指定安装子集构建包含列表和排除列表,如下所示:

"subsets": {
    "build": {
        "include": [
            "babel-cli",
            "dotenv"
        ]
    },
    "test": {
        "exclude": [
            "eslint",
            "lint-rules",
            "prettier"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后运行install-subset test

这将暂时重写您的 package.json 以不安装那些排除的软件包,然后恢复它(与 lerna 的操作方式非常相似),这取决于软件包可以节省大量时间和带宽。

也适用于纱线,是开源的,欢迎提出问题/PR。