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

时间:2018-02-01 11:09:21

标签: npm

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

简短的回答是否定的,npm不是为此设计的。这增加了npm不愿意支持的复杂程度。话虽如此,我写了一个包来做它。

我的包是install-subset,可以使用npm install -g install-subset

进行全局安装

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

"subsets": {
    "build": {
        "include": [
            "babel-cli",
            "dotenv"
        ]
    },
    "test": {
        "exclude": [
            "eslint",
            "lint-rules",
            "prettier"
        ]
    }
}

然后运行install-subset test

这会暂时重写你的package.json,不安装那些被排除的包,然后恢复它(非常类似于lerna的运作方式),这取决于包可以节省大量的时间和带宽。

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

答案 1 :(得分:0)

您可以使用其他方法,例如此处的官方文档中所述的“ optionalDependecies”:

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"
  }
}

并致电

npm install --no-optional

它将仅安装以下内容:

some-package-name-1, some-package-name-2