两周前,npm 发布官方博客表示,他们不小心移除了用户的 floatdrop,并在公共 npm 注册表中阻止了所有 102 个软件包的查找和下载。其中一些软件包是高度依赖的,比如 require-from-string,这样的移除中断了许多用户的安装。不过 npm 很快发布博客做出澄清,这是内部运营问题,而非安全问题,让用户不要担心。
npm 解释道,那段时间,他们发布了一个安装包,其中包含垃圾邮件和用于 floatdrop 的合法软件包的 README,而垃圾邮件的系统标记将 floatdrop 识别为垃圾软件包。使得工作人员在审查和处理垃圾邮件报告的过程中,将其误删。
60 秒后,工作人员发现,floatdrop 并不是一个垃圾软件包发送源,而其中的软件包在 npm 生态系统中被大量使用。发现者赶紧通知同事,重新激活了用户,并立即恢复软件包的正常使用。
在 npm 工作人员接受用户请求删除包的情况下,工作人员会以相同的名称(安全占位符)发布替换包提醒那些依赖它的人,原来的软件包不再可用,并防止他人发布使用该软件包名称的新代码。 然而,在两周前事件发生的时候,相关负责人表示,在这样的情况下,他们没有相关的规定或措施来发布被删除的软件包的占位符。
npm 现在会对给予被删除的软件包 24 小时的冷却时间,用以重新发布或恢复,并且也在更新他们的审查流程。

引用来自“开源中国首席圣杯守护者Saber”的评论
npm和cnpm有什么区别?感觉都好强大?什么原理引用来自“mskf”的评论
cnpm 主要是 npm 的镜像引用来自“开源中国首席圣杯守护者Saber”的评论
npm和cnpm有什么区别?感觉都好强大?什么原理引用来自“haitaosoft”的评论
一个项目a及其库b 都使用到更底层的库c时,要求它的版本不同,npm能处理好吗?比如a要求v1.2的c,b要求v2.3的c
引用来自“haitaosoft”的评论
一个项目a及其库b 都使用到更底层的库c时,要求它的版本不同,npm能处理好吗?比如a要求v1.2的c,b要求v2.3的c
我记得npm一开始就是这样做的,不过后来因为目录太深改成了相同依赖在最外层共享的模式,如果发生版本冲突才会再改为原来内嵌的方式