lig*_*eed 3 javascript node.js npm npm-install
我正在阅读一篇关于流行 npm 包 (left-pad) 的作者如何在删除他的包后导致应用程序中断的文章。
怎么会这样?你下载的时候不是本地下载了npm包的代码npm install --save吗?我认为这是一个问题的唯一情况是那些通过 CDN 使用该项目的人。我的假设正确吗?
src 文章: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 服务器上运行,甚至由其他开发人员在本地机器上克隆。我从事的项目每天至少在远程 CI 服务器上部署和测试 5 次;每次我们将提交推送到远程存储库时。
自从那个用户删除了他非常依赖的模块后,$ npm install全球很多s 开始失败。很多人无法将更新推送到他们生产服务器上的项目,其他开发人员无法在他们的机器上获取项目以便他们可以进行工作等等......
为了防止这些问题,npm引入了一项政策,禁止取消发布超过 72 小时的模块:
从npm:
注册表数据是不可变的,这意味着一旦发布,包就不能更改。我们这样做是出于对依赖这些软件包的用户的安全性和稳定性的考虑。因此,如果您曾经在 1.1.0 版本中发布过一个名为“bob”的包,那么在该版本中永远不会发布具有该名称的其他包。即使该包未发布也是如此。但是,由于意外发生,我们允许用户在 72 小时内取消发布他们刚刚创建的包。