【问题标题】:Install subset of dependencies with npm使用 npm 安装依赖项子集
【发布时间】:2017-04-14 16:30:50
【问题描述】:
有没有办法在 npm 中使用别名或“功能标签”指定依赖项的子集?也就是说,如果有人知道他们只会使用我的包的某些有限功能子集,他们可以指定这些功能,然后在npm install 上,只下载与这些功能相关的依赖项?
我的包依赖非常多,安装需要将近半个小时,但大多数用户只需要其功能的一个子集。我正在考虑如何将依赖项划分为 devDependencies 和依赖项之类的东西,但是有 n 个组,而不仅仅是这两个。例如:
npm install --feature feature1 --feature feature2
通过阅读the docs,我认为这里的答案是“否”,但您对这种情况有何建议?将包拆分成更小的插件包并让用户安装他们想要的插件?我不希望用户配置太复杂的东西。
【问题讨论】:
标签:
npm
npm-install
package.json
【解决方案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 以不安装那些排除的包,然后恢复它,这取决于包可以节省大量时间和带宽。
也适用于 yarn,是开源的,欢迎提出问题/PR。
【解决方案2】:
您可以用来执行此操作的另一个第三方包是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