npm符号链接节点模块到主目录而不是redownloading?

使用npm时,当一个包需要其他包时,它会创build一个依赖关系的树形结构。 有时这些依赖关系中的很多依赖于来自其他包的相同包。

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

我觉得这会加快安装和减less重复文件的磁盘使用。

(这是npm3应该做的吗?)

是的,你提出的build议是可能的(至less在Linux上符号链接是按预期解决的)。

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

例如,不pipe有多less(子)依赖依赖于somedep v。^ 1.xx,你只能得到一个somedep的副本。 这可能会直接放在根node_modules中,以便任何子依赖可以要求它。

较早版本的npm不会自动执行此操作,但可以通过运行“npm dedupe”来调用相似的效果。

但是请注意,这个方法比在这个问题中提出的要弱一些:如果你的3个依赖关系依赖于somedep v。^ 1.xx,而另外3个依赖依赖于某些v。^ 2.xx,那么npm显然不能把这两个依赖关系到父节点node_modules。

此外,检查ied项目: https : //github.com/alexanderGugel/ied 。 它的作用与你所build议的类似,但可悲的是,它只安装了每个依赖的一个版本,这是相当有限的。