我正在阅读一篇文章,内容是关于流行的 npm 包(左侧)的作者在删除包后如何导致应用程序崩溃。
怎么会这样呢?当你 npm install --save
时,npm 包的代码不是下载到本地了吗?我认为这是一个问题的唯一情况是那些通过 CDN 使用该项目的人。我的假设是否正确?
文章来源:https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/
最佳答案
大多数项目不会将实际模块提交给源代码管理
node_modules
文件夹通常不会上传到 Git 或 SVN 等源代码管理中。它通常是一个巨大的文件夹,每次推/拉它都会很麻烦。
此外,一些模块包含 C++ 代码,并在安装到用户操作系统时进行编译。我可能拥有与安装它的用户不同的操作系统,因此如果我盲目地从源代码管理下载他自己编译的该模块版本,该模块将无法工作。
取而代之的是一个小配置。包含 package.json
等文件,描述项目需要哪些模块。当您运行 $ npm install
时,包管理器(npm 或 yarn)随后会读取该文件并开始下载它引用的模块。
每次部署或克隆项目时,机器都会从其存储库下载源代码,但没有模块(因为它们不在源代码控制中),然后人或机器运行$ npm install
也可以获取依赖/必需的模块。
项目一直在部署和构建
现在,项目总是部署在远程服务器上;即将项目部署到生产服务器或其测试在远程 CI server 上运行甚至被其他开发人员克隆到他们的本地机器上。我从事的项目每天至少在远程 CI 服务器上部署和测试 5 次;每次我们将提交推送到远程存储库时。
由于该用户删除了他非常依赖的模块,全局许多 $ npm install
开始失败。许多人无法将更新推送到他们的生产服务器上的项目,其他开发人员无法在他们的机器上获取项目以便他们可以处理它等等...
为了防止这些问题,npm介绍a policy禁止取消发布超过 72 小时的模块:
来自 npm :
Registry data is immutable, meaning once published, a package cannot change. We do this for reasons of security and stability of the users who depend on those packages. So if you've ever published a package called "bob" at version 1.1.0, no other package can ever be published with that name at that version. This is true even if that package is unpublished. However, because accidents happen we've allowed a 72 hour window for users to unpublish packages they have just created.
关于javascript - 删除 npm 包时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54542500/