如何在 npm 中升级全局包的依赖

how to upgrade a dependency of a global package in npm

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

$ npm install -g pouchdb-server
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: 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:

├─┬ pouchdb-server@1.2.1
│ ├─┬ couchdb-harness@0.1.6
│ │ └─┬ glob@3.1.21
│ │   └── graceful-fs@1.2.3
│ ├─┬ http-pouchdb@1.1.3
│ │ └─┬ pouchdb@5.4.5
│ │   └─┬ lie@3.0.4
│ │     └─┬ es3ify@0.2.2
│ │       └─┬ jstransform@11.0.3
│ │         └─┬ commoner@0.10.8
│ │           └── graceful-fs@4.1.11
│ ├─┬ pouchdb-adapter-node-websql@6.1.0
│ │ └─┬ websql@0.4.4
│ │   └─┬ sqlite3@3.1.8
│ │     └─┬ node-pre-gyp@0.6.31
│ │       ├─┬ tar@2.2.1
│ │       │ └─┬ fstream@1.0.10
│ │       │   └── graceful-fs@4.1.9
│ │       └─┬ tar-pack@3.3.0
│ │         └─┬ fstream@1.0.10
│ │           └── graceful-fs@4.1.9
│ └─┬ pouchdb-node@6.1.0
│   └─┬ leveldown@1.5.0
│     └─┬ prebuild@4.5.0
│       ├─┬ node-gyp@3.4.0
│       │ ├─┬ fstream@1.0.10
│       │ │ └── graceful-fs@4.1.11
│       │ └── graceful-fs@4.1.11
│       └─┬ node-ninja@1.0.2
│         └── graceful-fs@4.1.11
├─┬ webpack@1.13.1
│ ├─┬ enhanced-resolve@0.9.1
│ │ └── graceful-fs@4.1.4
│ └─┬ watchpack@0.2.9
│   └─┬ chokidar@1.5.1
│     └─┬ fsevents@1.0.12
│       └─┬ node-pre-gyp@0.6.25
│         └─┬ tar@2.2.1
│           └─┬ fstream@1.0.8
│             └── graceful-fs@4.1.3

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

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

here

得到这个
$ npm update minimatch
$ npm -v minimatch
2.10.1
$ npm install -g npm@3
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@3.10.5 /usr/local/lib/node_modules/npm
$ npm install -g minimatch@3.0.2
/usr/local/lib
└─┬ minimatch@3.0.2 
  └─┬ brace-expansion@1.1.6 
    ├── balanced-match@0.4.2 
    └── concat-map@0.0.1 

$ npm -v minimatch
3.10.5

对于 graceful-fs 尝试:

npm install -g graceful-fs graceful-fs@latest

是否有特殊原因需要全局安装 pouchdb-server

考虑将它添加到 packages.json 下的 peerDependencies,全局卸载它,删除本地 node_modules 文件夹,然后从头开始安装。

通常建议不要全局安装——最好通过 devDependenciespeerDependencies 等方式安装软件包

这是可取的,因为它避免了使用相同依赖项的其他包的副作用。此外,您还可以将所有依赖项保留在版本控制中。

参考资料

What's the difference between dependencies, devDependencies and peerDependencies in npm package.json file?

不能自己解决这个问题,你需要请求包维护者升级他们的依赖项 .

能做的最好的就是运行npm update -g(a.k.a.npm upgrade -g)确保所有(全局,在这种情况下)包被升级到依赖规范允许的最新版本的依赖项。在各自的 package.json 文件中。

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

包设计者在依赖包中指定一个允许的范围版本号,由于semver (semantic versioning)的规则,超出该范围通常是不安全的。
不幸的是,这意味着长时间未更新其依赖项的包 运行 有被 Node.js/npm.

更改淘汰的风险

查看您的具体情况

pouchdb-server"couchdb-harness": "*" 具有依赖性,它指定 any 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 版本。)