NPM 会将 node_modules 依赖包扁平化吗?
发布于 3 年前 作者 JexCheng 6514 次浏览 最后一次编辑是 2 年前 来自 问答

NPM 安装时每个依赖的包都重新复制了一份,导致一个小小的项目安装完依赖就占了几百M的空间,而且node_modules/xxx/node_modules...... 路径太深,还不知道NPM有没有重复下载,不是一般无语,看有人提了 Issue 建议用 node_modules/package@version 这样扁平化的方式管理,减少重复文件,但官方竟然拒绝了,不知道他们脑子里想的什么。我印象中好像有提到说 NPM 新版将支持node_modules扁平化目录树,但没找到具体消息。

10 回复

@i5ting 支持了?我用 npm 最新版本 2.13.4 安装还是有很多层 node_modules啊?

@xieren58 试了下,是扁平了一点,只是没有完全扁平,而且发现用了3.x的NPM安装后体积竟然更大了 -_-! 还是放弃

不, node_modules 的主要目的是为了 multi version , 即同一个项目使用一个包的两个版本不冲突, 减少文件不是主要目的

当然, 你可以 npm dedupe https://docs.npmjs.com/cli/dedupe

支持 node_modules长了windows下都删除不了

运行时几百M问题不大,GIT的时候一定要ignore这个文件夹(PS,BOWER的文件夹也要IGNORE)。布署的时候传GIT的源码或者直接在GIT中CHECKOUT,完了之后再在服务器 npm install 一下,服务器上安装也快,NPM有没有CACHE没具体测试过,目测是有的,照理这种问题NPM的开发人员应该会注意到。

@magicdawn 我不是说了目录名为 package@version 之类的组织方式解决多版本的问题了么? dedupe 这个功能不应该默认的么?

@JexCheng

package@version require(‘some-module’) 要先去查看包依赖的some-module版本, 要修改require时的逻辑… 但是这样就是centerlized 了 , I hate centerlize.

挖坟/// 不需要呀require(‘some-module’) 完全可以忽略 版本 去寻找当前packer 依赖的模块 ,然后不就可以了

回到顶部