你们家的 nodejs, node_modules 太占空间了。。。。

2018-05-10 10:36:19 +08:00
 wlwood
突然发现空间不够用了。。。
https://s1.imgs.cc/img/aaaaaROv3.png?_w=750

然后,写个脚本,把 node_modules 干掉后

https://s1.imgs.cc/img/aaaaaROvG.png?_w=750

瞬间有磁盘了😕😕😕
24543 次点击
所在节点    Node.js
71 条回复
fulvaz
2018-05-11 02:24:57 +08:00
yyfearth
2018-05-11 03:16:20 +08:00
@yuann72 你说的当然可以 但是问题就出在 “检查下所有项目的 package.json ”
也就是说 要么在 cleanup 的时候整个系统寻找 package.json
要么在 install 的时候需要记录每一个 package.json 存在的路径
都不是一件容易而且有效率的办法

否则 你在做清理的时候 你没办法知道有没有其他项目在使用你想要清理的包
这样一来 就意味着 所有 node 的项目就不是 portable 的 而且也不能随便移动位置和直接删除

现在 node_modules 最大的好处就是 node 项目大部分情况是 portable 的
只要 OS 兼容 Node 版本 兼容 你可以随时挪动位置 或者 删除 而且不影响其他项目
另外 如果你一个项目的包弄糟了 只需要删掉 node_modules 重来就好

我觉得唯一的问题 不是 node_modules 太大 而是文件太多 目录太复杂
我觉得可以学其他的语言把文件打包一下 比如 jar war phar 这些 zip 一下
而且由于有可能会有不少重复文件 去重再压缩估计会小不少
然后在运行时按需求解压 因为很多时候 并不是所有文件都有用到
而且现在的机器性能 解压缩 zip 的时间基本上可以忽略 搞不好从 IO 角度
从 zip 读取可能比加载一大堆文件还要快

这个现在可能不是很必要 但是以后有 webasm 了 打包一下其实可以考虑的
yyfearth
2018-05-11 03:19:04 +08:00
另外其实还有一个好处就是 因为 node_modules 独立
所以可以直接修改依赖而不影响其他项目
尤其是在 debug 的时候 发现依赖的包里面有问题
甚至可以在 npm postinstall 里面直接 patch 依赖的包
lkytal
2018-05-11 05:11:45 +08:00
要共享就 npm link … 没那么多事,虽然不推荐
wlwood
2018-05-11 06:02:58 +08:00
@yyfearth 这个肯定是好。但是却也是缺点啊!相同的包相同的版本,在电脑里已经有了,在不同项目,还必须要有个副本。没错,这样项目互相不依赖,但对于创建了很多很多项目来说,拷贝那么多份这就很没必要了
wlwood
2018-05-11 06:28:31 +08:00
@df4VW 整个 SSD 盘就 50G,结果 node_modules 占用了 10 多 G...
doubleflower
2018-05-11 08:26:40 +08:00
可以搞个脚本用硬链接合并机器上的重复 npm 文件
重复的文件放在一个公共文件夹,在项目目录运行下脚本,如果有和公共目录相同的文件就删除掉项目的直接硬链过去
alamaya
2018-05-11 08:45:50 +08:00
作为个 java,用了 npm 才体会到 maven 的好。
KuroNekoFan
2018-05-11 08:54:23 +08:00
软连接是可行的办法,也会带来其他问题,不过讲真这个年代真的要吝惜硬盘空间吗?
kohos
2018-05-11 09:02:42 +08:00
新版的 npm 都可以共享 node_modules 里面的文件了,装个 koa2 打开 node_modules 就是一堆包,还是在基本没有链接的 Windows 下,只有引用了不同版本的同样的包才会出现多级 node_modules 的情况。
除非一个服务器跑几十个项目……然而既然要跑几十个项目,磁盘空间不是应该大一些吗
ooo3o
2018-05-11 09:03:47 +08:00
喜闻乐见
Node 这么种设计垃圾到爆的破东西能这么流行, 给世界网络增加了巨大的流量贡献了.
tushankaka
2018-05-11 09:26:41 +08:00
@ooo3o 一不小心点开了你的头像。发现你不喜欢的还有 git。。。。。
ooo3o
2018-05-11 09:40:43 +08:00
@tushankaka 那都是以前的事了.
现在嘛, 只要来钱快, 不喜欢都照用了, 都是赚钱的工具而已.
yongzhong
2018-05-11 09:51:50 +08:00
wlwood
2018-05-11 09:59:47 +08:00
@yongzhong hahah , 我用脚本检查了下,还真就这样。
npm v5.6.0。同一个项目下,node_modules 目录下,包依赖,有大量的重复的包文件(当然,有部分做了软链接)。
同一个包,在 node_modules 目录下有大量的拷贝
yaxin
2018-05-11 10:00:19 +08:00
find / -type d -name "node_modules" | xargs rm -rf
wlwood
2018-05-11 10:02:38 +08:00
@kohos
@KuroNekoFan 对对,我要去买磁盘了。
mritd
2018-05-11 10:02:51 +08:00
@fds 这个,恕我直言,这个不是 "点" 空间啊,轻松上百 m 比 jdk 都大
wlwood
2018-05-11 10:03:18 +08:00
@yaxin 这个,会把 npm 也干掉了
mritd
2018-05-11 10:07:56 +08:00
我就感觉 node 这个包机制都是各种神奇的,不论是从 node modules 体积,还是里面文件组织(各种软连接),异或是安装时候让你下载 gcc py2.......无处不透露着一种诡异的氛围 😒后端狗表示完全看不懂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453676

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX