请教,为什么大部分框架,工具,脚手架等都需要在你的项目目录下重复的安装 node_modules?

2019-05-28 20:40:51 +08:00
 abcbuzhiming
NPM 明明是有所谓全局依赖存储路径的啊,为什么每个项目还需要单独一份 node_modules,非常的占空间。为啥不能像 maven,Gradle,Nuget 那样,只存一份完事了。是历史习惯,还是不得不这么做?
8907 次点击
所在节点    Node.js
53 条回复
xabc
2019-05-28 20:48:19 +08:00
node.js 就是因为这个垃圾包死掉的
没人负责,没人统筹,一包垃圾,不死才怪
BCy66drFCvk1Ou87
2019-05-28 20:51:52 +08:00
Node.js 创始人 Ryan Dahl 都嫌弃 Node 的槽点,搞新的开源项目 Deno 去了
mocyx
2019-05-28 20:57:59 +08:00
为什么我觉得还挺好?
绝对不会出现诡异问题,所有依赖都自己掌控
lihongjie0209
2019-05-28 21:00:04 +08:00
@mocyx 你用 maven 能出现什么诡异的问题?
ibegyourpardon
2019-05-28 21:06:32 +08:00
你还别说,我记得上次哪听说 Python 都要学着这么干了。
理由无非是全局的包和各个项目下的依赖不一样,大家现在都用 pyenv,venv,pipenv 之类的在不同项目中加载不同的,所以好像是 pip 还是啥的要搞一套类似 Node 这样的玩法,没指定走全局,当前目录下有的话走当前目录…还能方便打包 blahblah,毕竟你看 electron 那带的东西。

道理是对的,但我总觉得哪里还是有点不对劲。好像可以有更省事的方法来着。
karnaugh
2019-05-28 21:08:54 +08:00
你这个项目用的 vue 是 1.x 的那个项目的是 2.x 的,如果只存一份,会怎样?
两份都存的话,后续的 yarn 之类的就这么操作的
crysislinux
2019-05-28 21:10:05 +08:00
我就喜欢现在这样
andylsr
2019-05-28 21:10:32 +08:00
@ibegyourpardon 也没那么绝对~~py 的 env 也不是完全独立~有些用到系统依赖的就 gg 了
mritd
2019-05-28 21:10:45 +08:00
三行 js,npm install 一下比 jdk 都大
mritd
2019-05-28 21:13:14 +08:00
其实,最骚的是有些包自己去 Github 下东西,更骚的是这东西还可能已经被删了,你想想一下你用 mvn install 一下下载一个 jar,然后这个 jar 还可能去 github 下载一个 exe,最后你发现 release 页 exe 被作者删除了
abcbuzhiming
2019-05-28 21:18:52 +08:00
@karnaugh 这个难道不能在全局路径下 vue1.x 和 2.x 共存吗?这没什么吧,大部分包管理工具都是这么干的,多版本共存,每个版本只留一份
lizheming
2019-05-28 21:24:09 +08:00
cnpm 就修改了逻辑,所有的模块都是全局一个版本,项目下面的都只是全局的软链。
ibegyourpardon
2019-05-28 21:25:41 +08:00
@mritd 对,这个我就比较不能忍…

作为一个包,居然还有外部不可控的依赖……

文件体积大小就算了,毕竟打包后的项目的体积还可控,但万一人家外部依赖的挂了。。。

开发都进行不下去了好吗!!
mritd
2019-05-28 21:27:53 +08:00
@ibegyourpardon #13 而且这货不走你设置的那些缓存的,调 CI 跟吃了一坨屎一样难受
WittBulter
2019-05-28 22:44:57 +08:00
@mritd 存在外部非 npm 依赖的包可以不要用,npm 一开始的设计允许外部依赖还是一个挺 open 的,不然现在 github package 也没办法用这个 cli。这是给你用公司私有源或者紧急情况下自己 release fork 的包等等解决方案。

这么多人吐槽不用全局包,但 node 社区完全是有的啊,用 yarn2 不就完事了,什么 "node.js 就是因为这个死的" 都出来了,真的有了解过这个社区吗。

而且说到局部包和版本控制这个问题也和社区本身有关,因为社区的包太多了而且非常活跃,版本爆炸依赖复杂,所以这也是一个当时看起来比较好的解决方式,虽然以如今的眼光看有一些弊端,如分析依赖对比可用版本更新需要花费很多时间、磁盘读写时间长、没有过期危险的依赖警告 (有所改善了),但社区也一直在推陈出新,包括楼上说的缓存,yarn 就做的不错,还有很多 CI 也开始了专业级别的 nodejs 缓存等等,以我的视角看,在众多语言社区的包管理上,虽然算不上好,但绝不至于让语言死掉。
shuichengjian
2019-05-28 22:47:09 +08:00
我觉得没什么问题,就是有些 node modules 莫名失踪,才愁人。。。
KuroNekoFan
2019-05-28 23:14:13 +08:00
npm5 体验很好了吧,顺便为什么这贴压根没提 java 都能引来 ptsd 患者……
Osk
2019-05-29 01:29:18 +08:00
我一直很郁闷的是 node_modules 动不动就以万计的文件,真的是硬件配置限制了我的想像
OSF2E
2019-05-29 01:44:20 +08:00
关键还是水货包太多了
lonelygo
2019-05-29 02:10:51 +08:00
这事情,基本就是:理想丰满,现实骨感,背影还行,转身要命。

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

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

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

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

© 2021 V2EX