你们家的 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

瞬间有磁盘了😕😕😕
24537 次点击
所在节点    Node.js
71 条回复
xiaoxin8888
2018-05-10 16:42:44 +08:00
我们家的事关你什么事?
buf1024
2018-05-10 17:22:51 +08:00
@orzfly 至于为什么不用-delete,那是想看删除输出的文件。
fds
2018-05-10 17:28:38 +08:00
就是不想共享才搞成现在这个样子的。比如 Go 语言为啥默认直接生成个静态的很大的可执行文件?依赖有问题解决起来可麻烦了,不如浪费点儿硬盘空间。
maichael
2018-05-10 17:55:16 +08:00
共用的话不好做依赖版本控制。

你可以考虑使用 pnpm
mooncakejs
2018-05-10 18:06:50 +08:00
@wlwood py 的依赖处理方式也有人吹?一个多版本直接 gg,然后搞了 pyenv venv virtualenv virtualenvwrapper 一堆出来擦屁股。 搞出来后,并没有比 npm 高多少。
wlwood
2018-05-10 18:25:56 +08:00
@mooncakejs 起码有的选择了呀。对于很大部分人来说,并不需要多版本。
然后,对于多于需求多版本了,可以选择那些创建虚拟环境。

而且,怎么会不比 npm 好呢? npm 对于,每个包的依赖,不检查环境是否已经存在这个包没有,就直接又去 npm 一份回来。
pip 对于包里面的依赖,首先检查环境,如果存在就不再下载了。所以,对于同一个环境不存在同一个包,有多个副本的情况。

npm 对于同一个包,也可能有多个副本拷贝。

到底哪个高呢?
wlwood
2018-05-10 18:29:30 +08:00
@maichael 刚刚去试了下 pnpm,pnpm install 后,运行出错,服务起不来。npm 就 ok。emmmm,我去研究研究下
wlwood
2018-05-10 18:31:11 +08:00
@fds 嗯,有道理。对于 node 来说,这样的处理方式,可能会更好吧。
chenstack
2018-05-10 18:33:27 +08:00
说起来可能不信,我为了让几个 vue 项目共用 node_modules,把 node_modules 做成了软连接
wlwood
2018-05-10 18:36:42 +08:00
@chenstack 很好奇,结果怎么养呢?🙂🙂🙂
chenstack
2018-05-10 18:42:12 +08:00
@wlwood 感觉还不错,因为几个项目在同一个父目录下,依赖的库也差不多,用在开发环境上没发现什么问题
wlwood
2018-05-10 18:43:31 +08:00
@chenstack 66666. 这个,我要试试。
beginor
2018-05-10 18:45:41 +08:00
node_modules 就是个毒瘤, 好歹学一下 nuget 嘛,全局放一个目录, 删起来方便
a132811
2018-05-10 18:50:50 +08:00
http://www.ruanyifeng.com/blog/2016/01/npm-install.html
npm 搞出来这么多破事。。。心寒
maichael
2018-05-10 18:57:36 +08:00
@wlwood 不能就试试 yarn,反正都比 npm 好。至少现在这个版本。
wlwood
2018-05-10 19:27:21 +08:00
@maichael 嗯,有在用的,但是还是感觉太好
EricXuu
2018-05-10 19:46:11 +08:00
为啥就这个页面是黑的啊
yyfearth
2018-05-10 21:14:12 +08:00
@wlwood @janxin @maichael 其实可以的 多个项目其实可以共享全部或者部分 node_modules
node 会自动向上层目录寻找 所以如果有公共的依赖 而且版本一致 可以提取到上层目录的 node_modules 实现共享
或者 如果你这些项目的依赖完全一致 可以把其中一个 node_modules 放到上层目录 然后把其他的删掉 或者 symlink
如果你觉得太麻烦 有工具会自动帮你弄:yarn workspace
它会自动解决多个项目的相互依赖 同时提取公共的部分到同一个 node_modules
其他的项目会 symlink 到这个 node_modules 里面的依赖

@chenstack 不一定要 symlink 其实 node 会自动往上层目录找 另外 yarn workspace 最适合这种情况 会自动 symlink

@beginor 放全局目录也不一定是好事 如果你项目多 全局目录会非常大
而且 如果你要删除一些项目的时候 全局目录就没办法清理 只会越来越大 而且你还不敢随便删除

@wlwood 其实你说的不完全正确 npm 有 cache 的 如果有相同的依赖不会重复下载 但是由于每个项目是独立的 node_modules 自然会有独立的拷贝
但是我觉得从部署的角度而言 独立 node_modules 其实比较方便和干净
你只要把项目连同 node_modules 一起打包和拷贝 只要 OS 和 Node 相同 就可以直接跑起来
而且删除的时候 也很干净 不会在 global 留下不再需要的包

另外同一个项目下面 如果版本不同 NPM 倾向保留多个版本 这个是 node 社区的问题
不同版本(一般除了_._.x 修正版本)之间往往不兼容 而且也有可能会有包锁定依赖版本
NPM 现在的方法 其实是比较省事的 如果要 merge 和 flatten 反而会造成很多问题
目前新版本的 NPM 和 Yarn 就会做一些 merge 和 flatten 结果每次更新依赖的时候 会造成一些问题
yuann72
2018-05-10 22:13:29 +08:00
@yyfearth "如果你要删除一些项目的时候 全局目录就没办法清理 只会越来越大 而且你还不敢随便删除"
小白问下, 不是每个项目下都有 package.json, 里面不是记载了本项目使用了哪些模块吗? 不能写个脚本检查下所有项目的 package.json 文件来确定某个模块是否有被某个项目依赖吗? 如果都没有依赖就可以删
df4VW
2018-05-10 22:18:43 +08:00
磁盘空间什么时候成了开发的难点了

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

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

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

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

© 2021 V2EX