javascript - 删除 npm 包时会发生什么?

标签 javascript node.js npm npm-install

我正在阅读一篇文章,内容是关于流行的 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 时,包管理器(npmyarn)随后会读取该文件并开始下载它引用的模块。

每次部署或克隆项目时,机器都会从其存储库下载源代码,但没有模块(因为它们不在源代码控制中),然后人或机器运行$ 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/

相关文章:

javascript - 找到命运之轮的值(value)

javascript - 如何从 Javascript 中的 JSON 中删除字段?

javascript - 带有谷歌地图的AWS服务器

node.js - 带有 passportjs + Vue 的 Google oAuth

node.js - "npm install -g npm@latest"损坏了我的 npm 安装 - Windows 8.1

node.js - 如何修复 'fs: re-evaluating native module sources is not supported' - 优雅的 fs

node.js - 无法安装任何 npm 包

javascript - 如何在 Nodejs 调试控制台 View 中更改对象的字符串表示

javascript - 如何使用三元运算符满足3个条件从github api获取数据?

node.js - 是否有替代已弃用的 deferred.callback 的替代品?