npm符号链接节点模块到主目录而不是重新下载?

时间:2015-12-29 07:31:21

标签: node.js npm

使用npm,当包需要其他包时,它会创建依赖关系的树结构。有时很多这些依赖项依赖于其他软件包中的相同软件包。

我想知道,是否有可能使npm成为所有包都存储在全局node_modules中,并且任何依赖关系都只是符号链接回全局node_modules的顶部。我理解版本问题,可以通过存储附加版本名称的包,然后符号链接到正确的版本来处理。

我觉得这会加快安装速度并减少重复文件的磁盘使用量。

(这是npm3应该做的吗?)

1 个答案:

答案 0 :(得分:1)

是的,您提出的建议是可能的(至少在Linux上,符号链接会按预期得到解决)。

npm(没有任何版本)但是没有受益于符号链接。为了获得你提出的一些好处,新版本的npm的工作方式如下:如果需要多次打包,npm会在依赖树中尽可能高地安装软件包。这使得多个包使用相同的依赖性。

例如,无论有多少(子)依赖依赖于somedep v。^ 1.x.x,你只得到somedep的一个副本。这可能会直接放在根node_modules中,因此任何子依赖都可能需要它。

较旧版本的npm不会自动执行此操作,但是,您可以通过运行'npm dedupe'来调用类似的效果。

但是请注意,这种方法比问题中提出的要弱:如果3个依赖项依赖于somedep v。^ 1.xx而其他3个依赖项依赖于somedep v。^ 2.xx,那么npm显然不能同时使用这些somedeps到父node_modules。

另外,请查看项目:https://github.com/alexanderGugel/ied。它做了类似于你提出的建议,但遗憾的是,它只安装了每个依赖项的一个版本,这是非常有限的。