使用npm安装依赖项的子集

时间:2016-11-30 11:11:49

标签: npm npm-install package.json

有没有办法在npm中指定依赖项的子集,使用别名或"功能标记"?也就是说,如果有人知道他们只会使用我的包的某些有限的功能子集,他们可以指定这些功能,并且在npm install上只下载与这些功能相关的依赖项?

我的软件包具有大量的依赖项,安装需要将近半个小时,但大多数用户只需要其功能的一部分。我正在考虑如何将依赖关系划分为devDependencies和依赖关系,但是有n个组而不仅仅是那两个组。例如:

npm install --feature feature1 --feature feature2

从阅读the docs开始,我认为这里的答案是"没有",但您对此案例的建议是什么?将软件包拆分为较小的插件包并让用户安装他们想要的插件?我不想要一些太复杂的东西让用户无法配置。

2 个答案:

答案 0 :(得分:1)

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

简短的回答是否定的,npm不是为此设计的,主要是因为依赖树非常大,而且这个用例实际上可能只是让大多数用户复杂化。话虽这么说,我写了一个包来做。

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

进行全局安装

https://www.npmjs.com/package/install-subset

基本上,您可以在package.json中为命名子集构建包含列表和排除列表,如下所示:

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

然后使用例如install-subset test

调用它

这将暂时重写你的package.json,不安装那些被排除的包,然后恢复它,这取决于包可以节省大量的时间和带宽。

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

答案 1 :(得分:1)

可以用来执行此操作的另一个第三方程序包是group-dependencies。它允许您在包文件中定义[GROUP_NAME]Dependencies 数组(注意:不是对象),然后使用deps install [GROUP_NAME]仅安装该子集。

这是他们的自述文件中的一个示例:

{
  ...  
  "devDependencies": {
    "intercept-stdout": "^0.1.2",
    "jest": "^20.0.4",
    "strip-color": "^0.1.0"
  },
  // our new group representing testing dependencies
  "testDependencies": [
    "jest"
  ]
  ...
}

现在您只能为此新组安装依赖项:

# This will install jest@^20.0.4:  
$(npm bin)/deps install test