有没有办法在npm中指定依赖项的子集,使用别名或"功能标记"?也就是说,如果有人知道他们只会使用我的包的某些有限的功能子集,他们可以指定这些功能,并且在npm install
上只下载与这些功能相关的依赖项?
我的软件包具有大量的依赖项,安装需要将近半个小时,但大多数用户只需要其功能的一部分。我正在考虑如何将依赖关系划分为devDependencies和依赖关系,但是有n个组而不仅仅是那两个组。例如:
npm install --feature feature1 --feature feature2
从阅读the docs开始,我认为这里的答案是"没有",但您对此案例的建议是什么?将软件包拆分为较小的插件包并让用户安装他们想要的插件?我不想要一些太复杂的东西让用户无法配置。
答案 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