- 主题:[转载]两行代码构成的 npm 包影响到了数百万项目
js依赖不是指定版本,这一点很神奇
项目很容易因为某些依赖编译失败
【 在 hgoldfish 的大作中提到: 】
: 一个 npm 小项目的更新给整个 npm 生态系统制造了一场混乱,影响到了数百万 JS 项目。名叫 is-promise 的库包含了两行代码,其它项目可通过一行代码调用使用该库。它的功能是让开发者测试一个 JS 对象是否是 Promise。
: 尽管这个库只有两行代码,但它却是最流行的 npm 包之一,被超过 340 万个项目使用。
: 上周末 is-promised 释出了一个更新,结果由于它不符合正确的 ES 模块标准,导致使用该库的其它项目在构建时出错。问题并没有导致现有 JS 项目崩溃,而主要无法编译新版本。
: ...................
--
FROM 114.249.22.*
我是说,指定版本,而js里很多都是默认引用包的最新版本。当编译不通过,指定版本号的时候,发现又下载不了或是不维护了。
Rails也是这样
我用神奇用词不当。可能还是java太成熟了。
【 在 eGust 的大作中提到: 】
: 不依赖版本你觉得为啥会有 yarn?yarn.lock、package-lock.json 是摆样子看的吗?
: 倒是这年头有哪个包管理不支持 semver 和 lock 的,你说一个听听?
: 至于开源社区啥质量,都是混这个版的心里都没点儿数么?win8 之后不出9而是10,难道是微软脑子有病么?为啥一到 js 这边就神奇了?
: ...................
--
FROM 124.64.19.*
设计本意没错,但是实际情况是很多包依赖都是依赖最新的。结果导致出现新的问题。比如向后兼容问题。
所以固定有固定的好处。
而且我就喜欢固定的,这样我能明确知道我依赖的版本。
而且我也奇怪为啥mvn不学习一下,这种功能很简单。
但是我希望永远不要学习这种先进的包管理。
【 在 eGust 的大作中提到: 】
: 这可真把我逗乐了
: java 这么成熟,为啥包管理都学 ruby 不学 java 啊?windows 没有9是因为谁啊?
: 知道 semver 是啥意思么?作为 boilerplate 项目,不锁版本版本号的目的很明显,创建新项目的时候能自动获得最新的安全补丁,而不用担心功能受影响。而且实际中的情况也是,对于依赖复杂的项目,隔一两个月跑一次 yarn audit/npm audit,肯定会有大量的安全警告,并且 upgrade 正常情况下可以保证获取新版本修复安全隐患
: ...................
--
修改:littleSram FROM 124.64.19.*
FROM 124.64.19.*
您说的是。snapshot确实是默认最新。
版本区间我确实没用过。
【 在 oldwatch 的大作中提到: 】
: mvn是用snapshot解决这个问题
: 永远拉取最新实现
: 胆肥的话,mvn版本号也能按区间匹配永远拉最新的
: ...................
--
FROM 124.64.19.*
是,这是根本原因。
【 在 beep 的大作中提到: 】
: ~~~~~~~~~~~~~~~~~~~~~~~~从未见过这样的。
: 最常见的是^,就是在保证没有breaking change的前提下最新。没见过无脑最新的。
: js社区依赖出问题,基本都是不遵守semver语义,导致^下也出现了breaking change,或者干脆就是缺乏测试出了bug。讲道理大多数不是包管理逻辑的问题,而是社区开发质量普遍不高的问题。
: ...................
--
FROM 124.64.19.*