【问题标题】: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 
    

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2021-04-21
      • 2016-06-23
      • 2020-12-28
      • 2018-01-17
      • 2016-08-02
      相关资源
      最近更新 更多