- 主题:[转载]两行代码构成的 npm 包影响到了数百万项目
js可以指定依赖的版本不升级吗?
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 一个 npm 小项目的更新给整个 npm 生态系统制造了一场混乱,影响到了数百万 JS 项目。名叫 is-promise 的库包含了两行代码,其它项目可通过一行代码调用使用该库。它的功能是让开发者测试一个 JS 对象是否是 Promise。
:
: 尽管这个库只有两行代码,但它却是最流行的 npm 包之一,被超过 340 万个项目使用。
:
--
FROM 223.104.3.*
js语言真不太理解,2行代码为啥非要引入个库
【 在 hgoldfish 的大作中提到: 】
:
: 一个 npm 小项目的更新给整个 npm 生态系统制造了一场混乱,影响到了数百万 JS 项目。名叫 is-promise 的库包含了两行代码,其它项目可通过一行代码调用使用该库。它的功能是让开发者测试一个 JS 对象是否是 Promise。
:
: 尽管这个库只有两行代码,但它却是最流行的 npm 包之一,被超过 340 万个项目使用。
:
: 上周末 is-promised 释出了一个更新,结果由于它不符合正确的 ES 模块标准,导致使用该库的其它项目在构建时出错。问题并没有导致现有 JS 项目崩溃,而主要无法编译新版本。
:
: 许多知名的 JS 项目都受到影响,其中包括 Facebook 的 Create React App,Google 的 Angular.js 框架,Google 的 Firebasse-tools,亚马逊的 AWS Serverless CLI,Nuxt.js 等等。npm 生态系统的依赖问题早在 2016 年就引发过广泛关注。
:
:
https://www.zdnet.com/article/another-one-line-npm-package-breaks-the-javascript-ecosystem/ :
: --
: 灭绝人性啊
:
:
发自「今日水木 on iOS」
--
FROM 123.120.105.*
js依赖不是指定版本,这一点很神奇
项目很容易因为某些依赖编译失败
【 在 hgoldfish 的大作中提到: 】
: 一个 npm 小项目的更新给整个 npm 生态系统制造了一场混乱,影响到了数百万 JS 项目。名叫 is-promise 的库包含了两行代码,其它项目可通过一行代码调用使用该库。它的功能是让开发者测试一个 JS 对象是否是 Promise。
: 尽管这个库只有两行代码,但它却是最流行的 npm 包之一,被超过 340 万个项目使用。
: 上周末 is-promised 释出了一个更新,结果由于它不符合正确的 ES 模块标准,导致使用该库的其它项目在构建时出错。问题并没有导致现有 JS 项目崩溃,而主要无法编译新版本。
: ...................
--
FROM 114.249.22.*
不依赖版本你觉得为啥会有 yarn?yarn.lock、package-lock.json 是摆样子看的吗?
倒是这年头有哪个包管理不支持 semver 和 lock 的,你说一个听听?
至于开源社区啥质量,都是混这个版的心里都没点儿数么?win8 之后不出9而是10,难道是微软脑子有病么?为啥一到 js 这边就神奇了?
【 在 littleSram (littleSram) 的大作中提到: 】
: js依赖不是指定版本,这一点很神奇
: 项目很容易因为某些依赖编译失败
--
FROM 115.188.68.*
我是说,指定版本,而js里很多都是默认引用包的最新版本。当编译不通过,指定版本号的时候,发现又下载不了或是不维护了。
Rails也是这样
我用神奇用词不当。可能还是java太成熟了。
【 在 eGust 的大作中提到: 】
: 不依赖版本你觉得为啥会有 yarn?yarn.lock、package-lock.json 是摆样子看的吗?
: 倒是这年头有哪个包管理不支持 semver 和 lock 的,你说一个听听?
: 至于开源社区啥质量,都是混这个版的心里都没点儿数么?win8 之后不出9而是10,难道是微软脑子有病么?为啥一到 js 这边就神奇了?
: ...................
--
FROM 124.64.19.*
这可真把我逗乐了
java 这么成熟,为啥包管理都学 ruby 不学 java 啊?windows 没有9是因为谁啊?
知道 semver 是啥意思么?作为 boilerplate 项目,不锁版本版本号的目的很明显,创建新项目的时候能自动获得最新的安全补丁,而不用担心功能受影响。而且实际中的情况也是,对于依赖复杂的项目,隔一两个月跑一次 yarn audit/npm audit,肯定会有大量的安全警告,并且 upgrade 正常情况下可以保证获取新版本修复安全隐患
按照 semver 的要求,minor 版本号变化是要保证向后兼容的。这次的情况是没测试明白,直接功能就有问题。这种人为的错误在任何项目都有可能发生,咋就变成包管理的机制不成熟了?
【 在 littleSram (littleSram) 的大作中提到: 】
: 我是说,指定版本,而js里很多都是默认引用包的最新版本。当编译不通过,指定版本号的时候,发现又下载不了或是不维护了。
: Rails也是这样
: 我用神奇用词不当。可能还是java太成熟了。
: ...................
--
FROM 115.188.68.*
这种“好好的package.json静置三天构建就失败”的大戏已经不止一次了
其他哪家包管理有这么多坑的
默认最新这么激进的政策就必须要有配套的强制检查措施
比如发布前强制跑测试之类的
一边散养一边玩心跳,那就作呗
【 在 eGust (十年) 的大作中提到: 】
: 这可真把我逗乐了
: java 这么成熟,为啥包管理都学 ruby 不学 java 啊?windows 没有9是因为谁啊?
: 知道 semver 是啥意思么?作为 boilerplate 项目,不锁版本版本号的目的很明显,创建新项目的时候能自动获得最新的安全补丁,而不用担心功能受影响。而且实际中的情况也是,对于依赖复杂的项目,隔一两个月跑一次 yarn audit/npm audit,肯定会有大量的安全警告,并且 u
: ...................
--
FROM 180.169.205.*
这跟包管理有啥关系?我前面说了,js 生态系统里很多的问题是没有标准库导致的。作为最大开源社区,幺蛾子出的多也是理所当然的,谁让语言、工具每年都在发展呢。
“好好的package.json静置三天构建就失败”是什么鬼?首先,难道你的项目都没有 lock 文件,还是手动 gitignored 掉了?其次,就算是不锁 lock,除非遇到 native 工具再加上 py 版本一堆乱七八糟的问题,正常 package 都会有依赖项的版本号,而且如果不指定版本号 npm i/yarn add 都是默认不锁 patch 版本,为啥你就能遇到那么多 patch 版本号还能出问题的情况?况且知名有 native 依赖的包里,现在多数也应该不需要 py 编译了,除非还在用很多年前的版本。
package.json 里不定义工具链版本,由于 node/npm/yarn 的版本不兼容,出现奇奇怪怪的问题难道还怪工具了?好像你编译 c/c++ 库不需要关心用什么编译工具,java 库随便挑哪个 jdk 版本都能用似的
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 这种“好好的package.json静置三天构建就失败”的大戏已经不止一次了
: 其他哪家包管理有这么多坑的
: 默认最新这么激进的政策就必须要有配套的强制检查措施
: ...................
--
FROM 115.188.68.*
仅仅lock顶层包版本能挡住依赖的依赖是活的么?
版本锁定能逐级传递不?
【 在 eGust (十年) 的大作中提到: 】
: 这跟包管理有啥关系?我前面说了,js 生态系统里很多的问题是没有标准库导致的。作为最大开源社区,幺蛾子出的多也是理所当然的,谁让语言、工具每年都在发展呢。
: “好好的package.json静置三天构建就失败”是什么鬼?首先,难道你的项目都没有 lock 文件,还是手动 gitignored 掉了?其次,就算是不锁 lock,除非遇到 native 工具再加上 py 版本一堆乱七八糟的问题,正常 package 都会有依赖项的版本号,而且如果不指定版本号 npm i
: package.json 里不定义工具链版本,由于 node/npm/yarn 的版本不兼容,出现奇奇怪怪的问题难道还怪工具了?好像你编译 c/c++ 库不需要关心用什么编译工具,java 库随便挑哪个 jdk 版本都能用似的
: ...................
--
FROM 180.169.205.*
在没有 lock 文件的情况下,如果 package.json 里没有在 resolutions 里强制指定某一个包的版本,取决于各级依赖关系。一般依赖关系中会指定大于等于 minor 或 patch 版本,也有的会锁小于 major 或 minor 版本,没道理锁到 patch 版本
在有 lock 文件的情况下,自己去看 lock 文件,别想当然。yarn 举例,手动 upgrade 才会改动 lock,不指定 --latest 应该只升 patch 版本号,连 minor 都不会动
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 仅仅lock顶层包版本能挡住依赖的依赖是活的么?
: 版本锁定能逐级传递不?
--
FROM 115.188.68.*