为什么 node 项目的依赖都要放在 node_modules 下,而不整个中心依赖库?

2020-06-02 20:53:13 +08:00
 asanelder

比如有 2 两个 node 项目,依赖同一个库,那么每个项目中的 node_modules 都有一份。这不是重复下载和浪费磁盘空间么?

java 就不这样,java 一般都是放在 repository 下面(我指的是使用 maven).

当然,我知道可以 node install -g 。

但是我了解到的实践中,都是每个项目一份 node_modules 。

难到把所有项目的依赖放在一起会有问题?

7454 次点击
所在节点    Node.js
48 条回复
asanelder
2020-06-03 13:17:26 +08:00
@libook #40 感谢回答,涨知识了
asanelder
2020-06-03 13:21:43 +08:00
@linrz #38 老铁 nb,这都被你找到了
readonly
2020-06-03 15:07:32 +08:00
这个问题我也想过,当年因为 npm 都崇尚语义化版本号,这样方便升级,比如 package.json 里依赖了 lodash ^1.0.0 版本,那么执行 npm update 之后可以自动升级到 ^1.9.9 这样的版本上,只要是满足语义化版本的就可以升级。那么如果两个项目都写了 lodash ^1.0.0,我升级其中的一个,另一个也就 resolve 到 ^1.9.9 了,会导致不可预期的事情。但后面出了个 package-lock.json,这个文件里面就完整的记录了当前项目所用的版本甚至是包的下载路径,所以完全可以 resolve 到正确的版本上了,之所以不做应该就是大家习惯了,毕竟这样比较好向主子申请更好的电脑配置不是~
linrz
2020-06-03 16:39:01 +08:00
@asanelder 哈哈哈,以前水过一篇博客,对这块略有了解 https://linrz.me/2019/11/11/the-future-of-javascript-package-managment/
LeslieWongH
2020-06-03 16:42:44 +08:00
node 的最初开发者在 JSConf Eu 2018 上表示自己挺后悔在 node 中加个 node_module 文件夹的,而且引用还不是以.js 后缀结尾,直接模块名。种种开发 node 时让他觉得很羞耻的东西,让他决定在离开了 node 团队多年后,再去开发另外一个 V8 运行时——deno 。;)
详见油管。10 things I regret about node.js -- Ryan Dahl
<amp-youtube data-videoid="M3BM9TB-8yA" layout="responsive" width="480" height="270"></amp-youtube>
cheny95
2020-06-03 17:18:11 +08:00
a132811
2020-06-06 16:11:08 +08:00
一句话就是,node 是为了解决多版本冲突引入的这家伙。
http://npm.github.io/how-npm-works-docs/npm3/how-npm3-works.html

为了解决 node 这个坑(还有超级多的其它坑),于是有了 deno
Kobayashi
2020-06-20 01:24:42 +08:00

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

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

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

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

© 2021 V2EX