使用npm安装部分依赖项

5
有没有一种方法可以在npm中指定依赖项的子集,使用别名或“特性标签”?也就是说,如果有人知道他们只会使用我的软件包的某些有限功能子集,他们可以指定这些功能,并在npm install上仅下载与这些功能相关的依赖项?
我的软件包有大量的依赖项,并且需要近半个小时才能安装完成,但是大多数用户只需要其中的一部分功能。我想到了一种类似于将依赖项分为devDependencies和dependencies的方式,但不仅限于这两个组。例如:
npm install --feature feature1 --feature feature2

根据阅读文档,我认为答案是“否”,但对于这种情况,您有什么建议?将软件包拆分为较小的插件软件包,并让用户安装他们想要的插件?我不希望用户配置过于复杂。


重复的问题:http://softwareengineering.stackexchange.com/q/238257/255832 - Yosef Weiner
2个回答

6
短答案是否定的,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]安装该子集。

以下是他们README中的示例:

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

Now you can install only the dependencies for this new group:

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

这个包似乎不再与最新的NPM版本兼容。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接