node.js - 如何在 npm 中升级全局包的依赖项

标签 node.js npm versioning

我已经全局安装了 pouchdb-server 并且收到了关于 graceful-fs 的消息:

$ npm install -g pouchdb-server
npm WARN deprecated <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1d70747374707c697e755d2d332f332c29" rel="noreferrer noopener nofollow">[email protected]</a>: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a7c0d5c6c4c2c1d2cb8ac1d4e79689958994" rel="noreferrer noopener nofollow">[email protected]</a>: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.

正如消息所述,该包将在 node > 7.0(我使用的)中失败,因此我想知道如何执行升级。

如果我执行:

$ npm ls graceful-fs -g

我看到 graceful-fs 在多个全局包中使用,但唯一使用旧版本的是 `pouchdb-server:

├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fd8d92889e95999fd08e988f8b988fbdccd3cfd3cc" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="47242832242f23256a2f263529223434077769766971" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6e0902010c2e5d405f405c5f" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="60071201030506150c4d061320514e524e53" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="08607c7c782578677d6b606c6a48392639263b" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ee9e819b8d868a8caedbc0dac0db" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cba7a2ae8bf8e5fbe5ff" rel="noreferrer noopener nofollow">[email protected]</a>
│ │     └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6b0e1858020d122b5b45594559" rel="noreferrer noopener nofollow">[email protected]</a>
│ │       └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e8829b9c9a89869b8e879a85a8d9d9c6d8c6db" rel="noreferrer noopener nofollow">[email protected]</a>
│ │         └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="24474b49494b4a415664140a15140a1c" rel="noreferrer noopener nofollow">[email protected]</a>
│ │           └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="57302536343231223b7a312417637966796666" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5d2d32283e35393f703c393c2d29382f7033323938702a383f2e2c311d6b736c736d" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c5b2a0a7b6b4a985f5ebf1ebf1" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6f1c1e03061b0a5c2f5c415e4157" rel="noreferrer noopener nofollow">[email protected]</a>
│ │     └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9b7b6bdbcf4a9abbcf4bea0a999e9f7eff7eae8" rel="noreferrer noopener nofollow">[email protected]</a>
│ │       ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c1b5a0b381f3eff3eff0" rel="noreferrer noopener nofollow">[email protected]</a>
│ │       │ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="630510171106020e23524d534d5253" rel="noreferrer noopener nofollow">[email protected]</a>
│ │       │   └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="12756073717774677e3f746152263c233c2b" rel="noreferrer noopener nofollow">[email protected]</a>
│ │       └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="74001506590415171f34475a475a44" rel="noreferrer noopener nofollow">[email protected]</a>
│ │         └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3f594c4b4d5a5e527f0e110f110e0f" rel="noreferrer noopener nofollow">[email protected]</a>
│ │           └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9dfaeffcfef8fbe8f1b0fbeedda9b3acb3a4" rel="noreferrer noopener nofollow">[email protected]</a>
│ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a9d9c6dccac1cdcb84c7c6cdcce99f87988799" rel="noreferrer noopener nofollow">[email protected]</a>
│   └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fc90998a999098938b92bccdd2c9d2cc" rel="noreferrer noopener nofollow">[email protected]</a>
│     └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8b8baadaabda1a4ac88fce6fde6f8" rel="noreferrer noopener nofollow">[email protected]</a>
│       ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="84eaebe0e1a9e3fdf4c4b7aab0aab4" rel="noreferrer noopener nofollow">[email protected]</a>
│       │ ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d7b1a4a3a5b2b6ba97e6f9e7f9e6e7" rel="noreferrer noopener nofollow">[email protected]</a>
│       │ │ └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="55322734363033203978332615617b647b6464" rel="noreferrer noopener nofollow">[email protected]</a>
│       │ └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="96f1e4f7f5f3f0e3fabbf0e5d6a2b8a7b8a7a7" rel="noreferrer noopener nofollow">[email protected]</a>
│       └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b1dfded5d49cdfd8dfdbd0f1809f819f83" rel="noreferrer noopener nofollow">[email protected]</a>
│         └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="53342132303635263f7e352013677d627d6262" rel="noreferrer noopener nofollow">[email protected]</a>
├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="84f3e1e6f4e5e7efc4b5aab5b7aab5" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a7c2c9cfc6c9c4c2c38ad5c2d4c8cbd1c2e797899e8996" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c9aebba8aaacafbca5e4afba89fde7f8e7fd" rel="noreferrer noopener nofollow">[email protected]</a>
│ └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f081e0b1c170f1e1c143f4f514d5146" rel="noreferrer noopener nofollow">[email protected]</a>
│   └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="34575c5b5f5d50554674051a011a05" rel="noreferrer noopener nofollow">[email protected]</a>
│     └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbbda8beadbeb5afa89beaf5ebf5eae9" rel="noreferrer noopener nofollow">[email protected]</a>
│       └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7a14151e1f570a081f571d030a3a4a544c54484f" rel="noreferrer noopener nofollow">[email protected]</a>
│         └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e2968390a2d0ccd0ccd3" rel="noreferrer noopener nofollow">[email protected]</a>
│           └─┬ <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="107663646275717d50213e203e28" rel="noreferrer noopener nofollow">[email protected]</a>
│             └── <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0b6c796a686e6d7e67266d784b3f253a2538" rel="noreferrer noopener nofollow">[email protected]</a>

我尝试过 npm update -g Graceful-fs 但这不起作用,升级作为全局包依赖项的包的正确方法是什么?

需要明确的是:我不想全局安装 graceful-fs 包;相反,我想升级 pouchdb-server 包使用的 graceful-fs 安装。

最佳答案

无法自行修复此问题,您需要要求软件包维护者升级其依赖项

您能做的最好的事情就是运行 npm update -g (又名 npm upgrade -g )以确保所有(在本例中为全局)包都升级到其依赖项规范允许的最新版本的依赖项。在各自的package.json文件。

除此之外,无法升级到依赖项中的更高版本号,除非相关软件包本身被修改为依赖(允许依赖)其依赖包的更新版本。

包设计者指定依赖包之间允许的版本号范围,并且由于 semver (semantic versioning) 的规则,超出该范围通常是不安全的。 .
不幸的是,这意味着长时间没有更新其依赖项的包有被 Node.js/npm 的更改所淘汰的风险。


查看您的具体案例:

pouchdb-server依赖于 "couchdb-harness": "*" ,它指定任何 couchdb-harness版本满足依赖性(这是异常宽松的,可能以牺牲稳健性为代价)。

<强> couchdb-harness是问题,但是:这取决于 "glob": "~3.1.21" ,这意味着它不会安装并与 glob 一起使用。软件包版本高于3.1.x - 请参阅npm's docs on semver version specifications .

(最新的 glob 3.x 包本身依赖于 "minimatch": "~0.2.11" ,这解释了另一个警告,但是,如果 couchdb-harness 将其依赖项更新为最新,则该警告将会消失glob版本。)

关于node.js - 如何在 npm 中升级全局包的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214381/

相关文章:

node.js - 如何在 sequelize 中关联表格

node.js - Grunt 无法启动 : ">> ReferenceError: grunt is not defined"

javascript - 为什么我无法使用 npm 安装此模块?

android - 使用 Git 和 Eclipse 自动为您的 Android 应用程序编号

Maven 分支更新项目版本自动化发布工作流

javascript - Bluemix/Watson 自然语言处理无效的 API key

node.js - 使用 glob 输入在 npm 中进行 Concat(无 Grunt 或 Gulp)

node.js - 嵌套 Promise 不会将错误传播到 Node.js 中的父 Promise?

node.js - npm install 不适用于 gzipped tarball

.net - 获取 Silverlight 程序集的运行时版本