npm node_modules 为什么会是现在这样

2021-08-11 15:06:00 +08:00
 Imindzzz

都在吐槽 npm 的设计,依赖地狱、小文件多、占用空间大、慢。

那是什么导致了 npm 必须设计成现在这样呢,其它语言的包管理工具为什么没有这些问题(比如 manven)?

node 包管理有没有新的方案在开发中?

8485 次点击
所在节点    Node.js
34 条回复
lbunderway
2021-08-11 15:40:11 +08:00
我觉得 npm 的报管理还行啊,
包的依赖是有改进地方,但没到地狱那么夸张吧,
小文件多是什么意思呢
项目 node_module 占用空间应该在 500M 以内吧,发布环境再指定环境安装再砍掉一半空间,就现在的硬件条件这个空间不是什么吧
慢是什么慢呢

其他语言不了解,至少比 go 好用,哈哈
zed1018
2021-08-11 15:42:48 +08:00
新版本的 npm 还行吧。或者换 yarn 。node_modules 里东西多,依赖复杂主要还是 js 生态没有一个比较强的 std lib 吧。啥都要导个包。依赖能少么。
chengxy
2021-08-11 15:44:06 +08:00
@lbunderway #1 慢应该是从 npm 服务器去找详细下载地址慢,如果有 lock 文件会快很多。
netwjx
2021-08-11 15:51:58 +08:00
是 java dotnet php... 等等以前古典语言的模块管理机制导致 npm 设计成现在这个样子的

也就是 npm 是一个纯粹为了工程上行得通, 没太考虑优美的方案
XTTX
2021-08-11 15:52:33 +08:00
反正我经常 npm install 报错, 改用 yarn install 就没有问题。
learningman
2021-08-11 15:53:01 +08:00
其他语言也有这些问题的,有些是靠编译解决了一部分。
但是主要还是前端库太多了,依赖链条一长就变成这样了。
yejinmo
2021-08-11 16:21:37 +08:00
“项目 node_module 占用空间应该在 500M 以内吧”

这个吧 好家伙 500M 算是可以接受的空间了么 是真没见过别的语言的包管理机制?
sleepm
2021-08-11 16:33:07 +08:00
还可以试试 https://pnpm.io/
4771314
2021-08-11 16:39:44 +08:00
新版本的 npm 已经不错了,老版本的才是恶心,那时候真是地狱
也可以试下 yarn 和 pnpm,我感觉没有差太多
慢的问题可以看下网络和数据源的选择,国内可以使用淘宝或其他的数据源,会快一些
Rrrrrr
2021-08-11 18:02:10 +08:00
npm 本身还是没有规范。doc, src 为什么要上传。Github/gitlab 地址给出,让用户自己去看就好了。展平+单文件估计可以省很多空间。
ruxuan1306
2021-08-11 18:11:04 +08:00
@sleepm 看了下,感觉 npm install --global 又回来了
agagega
2021-08-11 18:12:15 +08:00
Ruby 默认是安装到语言目录而不是项目目录的,而且很久以前就有 lock 文件
otakustay
2021-08-11 19:30:44 +08:00
@ruxuan1306 倒也不是,global 只能 install 一个版本吧,pnpm 好歹让你感觉上和 local install 没有区别
MengiNo
2021-08-11 19:51:32 +08:00
go 感觉是比较完美的,特别是容器化后专门一个 volume 挂载 module 目录,所有项目通用。npm 黑洞真的心疼硬盘,不能理解为什么要一个项目一个包,PHP 是特殊的运行机制决定的,而 Node 工程化变成编译型语言后,为啥不和 go 那样设计成 "从仓库里找工具包" 的感觉。
Trim21
2021-08-11 20:07:03 +08:00
小文件多是因为 js 语言本身标准库不怎么样,挺多简单的功能不想自己写就得找个现成依赖。
JeffersonQin
2021-08-11 20:20:08 +08:00
@Trim21 捕捉 bangumi 大佬(之前有在论坛问过爬虫的问题🤣
luob
2021-08-11 20:25:47 +08:00
node_modules 无底洞这口锅分给谁都行,恰恰只有 npm 一点都分不上。反而是因为 npm 设计得非常优秀,各种循环依赖重复依赖版本问题都能得到解决,使得各种无底洞居然还能勉强跑起来。
你要觉得是 npm 过于优秀导致的大家胡乱搞依赖所以一定要分给它锅那我也无话可说。但是你说有没有新的方案在开发中就太扯了,难道要把功能全砍掉重新开发一个基于 git 地址的残废包管理器用强行增加用新包的难度来促使包的平均质量增加吗?
Trim21
2021-08-11 20:26:01 +08:00
@JeffersonQin 草,别这么叫,太尴尬了…
laozhoubuluo
2021-08-11 20:57:56 +08:00
依赖地狱、小文件多、占用空间大、慢 不能说是 npm 的问题,是 JS 生态滥用三方包导致软件复杂度严重升高的结果,毕竟软件成品的复杂度肯定是大于需求的复杂度的。
甚至再说大一点,任何滥用三方包的应用程序或者说生态的成品都会遇到上述四个问题。每一层组件都滥用三方包之后,再用这些组件层层叠加组成的项目肯定是各种无底洞的,开发再聪明也无能为力。
rockdai
2021-08-11 21:53:22 +08:00

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

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

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

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

© 2021 V2EX