npm left-pad 的取消发布是如何破坏代码的?

How did the unpublishing of npm left-pad break code?

我一直在阅读 npm left-pad 惨败,但我对它是如何发生的感到有些困惑。我想我对 npm 的实际工作方式有误解。如果 left-pad 的开发人员取消发布该软件包,我认为 npm install left-pad 将不再有效。但是,对于已经安装的用户来说,left-pad不会还在node_modules文件夹中吗?难道 say Babel 的开发人员必须为 npm 删除并重新安装 left-pad 才能意识到包已经消失了吗?我显然遗漏了什么,但我不确定是什么。

当我 运行 npm install babel 时,left-pad 没有捆绑在 babel 中,而是在它的 package.json 文件中表示为依赖项。所以 npm 然后必须去寻找 left-pad 并下载它。因此,如果您是第一次安装 left-pad 或任何使用 left-pad 的东西,您将无法安装。虽然这意味着如果它已经存在于您的本地目录中您是安全的,但是一旦在其他地方构建该项目将无法正确构建。例如,CI 服务器为每个新的变更集从头开始进行干净构建,将无法构建依赖于 left-pad 的任何项目。或者,如果您是第一次签出一个项目,或者将其部署到新服务器,您将无法构建。

如果您直接依赖 left-pad,这很容易解决。只需编写替换并更新您的代码即可使用替换。但是当它在你的依赖树深处需要时,比如 Babel,你不太可能自己重构 Babel 或其他模块来使用 left-pad 替换。您必须等待所有各种节点模块开发人员用其他东西更新他们的模块并重新发布。

它并不像新闻文章听起来那么可怕,但它带来了巨大的不便,并且给已经缓存了 left-pad 的开发人员工作区之外的许多系统带来了麻烦。

正如@Lazar 所说,您理解正确。

问题在于,如果 Babel 依赖于 left-pad,并且我尝试安装 Babel,它将失败。

好吧,我总是可以自己重写它作为解决方法。

但是,如果它是一个模块所使用的模块所使用的模块所使用的模块所使用的模块,或者更多模块所使用的模块,那么您将面临一场真正的噩梦,因为 Babel 什么也做不了,您也不能,并且您被迫等待每个依赖 left-pad 的模块开发者更新他们的代码。