如何忽略嵌套NPM依赖关系?

时间:2018-07-23 21:05:10

标签: node.js

是否可以忽略其中一个依赖项的特定依赖项?假设我安装了内部依赖于A的模块B,并且我想忽略B并在安装A时不安装它。

(之所以这样,是因为我知道我永远不会使用A中使用B的代码段,所以我想减小node_modules的大小)。

让我们说:

// module A
exports.B = require('module-B');
exports.C = require('module-C');

当我npm install A时,我知道我永远只想使用C,所以我想忽略module-B的安装。

1 个答案:

答案 0 :(得分:0)

您使用NPM's local paths feature(在NPM> 2.0.0中) 可以

是否 应该 不是另一回事...

可能会这样:

  1. 创建一个虚拟本地包:

    • 创建一个index.js或同等功能的东西,只需导出与实际包使用的类型或键匹配的内容即可。例如,如果实际包导出了一个包含名为someFunc的函数和一个对象someObj的对象,那么您可能会导出类似{ someFunc: () => {}, someObj: {} }的对象,这样文件就不会崩溃例如,`const {someFunc} = require('unwanted-nested-dep')
    • 在其package.json中,给它起一个名字,传达您在做什么以及原因:
    {
        "name": "skip-this-dependency",
        "description": "This is a dummy package to prevent unwanted nested dependencies from being installed",
    
  2. 然后,在主package.json中,为每个指向此嵌套嵌套的不需要的dep添加一个条目;像这样的最后一行:

    "dependencies": {
      "async": "^2.4.2",
      "pumpify": "^1.3.0",
      "unwanted-nested-dep": "file:../skip-this-dependency"
    }
    

但是请注意,这样做会产生副作用

例如,您可以尝试通过固定需要不需要的嵌套dep的依赖项的版本号来防止将来发生错误...但是,如果更新执行其他依赖项将跳过的嵌套dep添加为依赖,使用它,并期望它起作用。

这是一个粗鲁的选项,请尽可能避免使用。通常,您应该找到另一种解决根本问题的方法(例如fork或替换直接依赖项,或者使用npm缓存或prune等)。