一个单行代码的 npm 库,竟然让数百万个 JavaScript 项目崩溃了

2020-04-27 21:42:50 +08:00
 matrix67
https://segmentfault.com/a/1190000022483038
6041 次点击
所在节点    程序员
41 条回复
realpg
2020-04-27 22:02:52 +08:00
不懂你们 JS 程序员的引用方式
难道不精确限定版本么?
Chingim
2020-04-27 22:06:28 +08:00
package-lock.json 是多么的重要
raymanr
2020-04-27 22:16:35 +08:00
引用这事情,感觉有点像把捅人的刀子交到了别人手上
nyanyh
2020-04-27 22:21:45 +08:00
left-pad 才过去几年,按理来说这点代码不应该自己实现吗,为什么要调用别人的库
matrix67
2020-04-27 22:30:42 +08:00
@nyanyh 为了不重复发明轮子。
matrix67
2020-04-27 22:31:47 +08:00
@raymanr 之前在 hn 上看到一个观点,说你同事的代码提交上来 review 了又 review,然后一个陌生人写的啥都不知道就合入然后升上去了。。。。。
firefox12
2020-04-27 22:34:12 +08:00
java 也一样, 几白兆的 jar maven 过来就开始跑了。
nyanyh
2020-04-27 22:35:58 +08:00
@matrix67 #5 省下两行代码,却在 package.json 里多了个依赖,该有的 import 一样不能缺,没看出到底节省了什么……
Kobayashi
2020-04-27 22:36:18 +08:00
我记得以前有个类似事件,也是非常短的库。我想不明白,这种一行的烂库有什么好引用的。
rayhy
2020-04-27 22:55:47 +08:00
可以的…看着蛮吓人。不过有个问题,这种几行代码的库,你们是怎么发现的?知道是为了避免重复造轮子,但这种感觉就是一个 gist 呀,Google 一下可能就找到了。反而发现这么一个库似乎不是那么容易…
james122333
2020-04-27 23:03:46 +08:00
这确实是个破烂库 测也只是测大概而已
测试是否 promise 用意何在... 看来又是大而全的阴谋
小而精不重要的东西 话说也不精
XanderChen
2020-04-27 23:06:22 +08:00
有句话怎么说的来着,

有时候免费的,反而更加昂贵。
wangyzj
2020-04-27 23:09:05 +08:00
CI 应该没测试
或者没 CI
应该都不是大项目
影响也都不会大
xunco
2020-04-27 23:13:48 +08:00
@wangyzj #13 Angular.js 、Create React App 、Nuxt.js 算吧,影响还是有的
xiangyuecn
2020-04-27 23:17:17 +08:00
遇到这种事,只能一句 我屮艸芔茻 了。

我觉得根源还是 dependencies 的书写方式上,现在是 名称字符串:版本号字符串 这种形式,然后 npm 的 install 瞎几把下载,固定版本号没有传染性。

如果 dependencies 里面的版本号搞成对象形式,固定版本号必填,允许什么级别版本号升级兼容自己选择。那么根据最终使用如果使用的是固定版本号,安装的所有库都必须使用固定的版本号,版本的选择权就完全交给了库的使用者。传染性很重要。

说白了还是 npm 的设计有毛病。
james122333
2020-04-27 23:19:03 +08:00
面对过程强的地方在于只要知道过程中前后差异 只要能达成一样目的就替代掉了
弄个对象还要考虑对象相容 甚至弄个对象互转超级麻烦
love
2020-04-27 23:25:32 +08:00
@xiangyuecn 如果固定版本号,所有的库基本都无法共享同一份库了,比如 A 库用了 c 库 1.01 版本,B 库用了 c 库 1.02 版,内存和硬盘中就有二份基本差不多的重复代码了,磁盘和内存用量要爆炸一波,用处却没多少。现在的 package-lock 才是最佳选择。
james122333
2020-04-27 23:26:23 +08:00
只要不是写烂过程或者语言本身函式用法烂 函式好的多
baozijun
2020-04-27 23:32:27 +08:00
@firefox12 #7 maven 还好,除了 spring 官方库不限定版本外,其他都要限定版本
blless
2020-04-27 23:38:37 +08:00
golang 程序员点了个赞

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

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

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

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

© 2021 V2EX