如何在 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 文件夹,然后从头开始安装。
通常建议不要全局安装——最好通过 devDependencies
、peerDependencies
等方式安装软件包
这是可取的,因为它避免了使用相同依赖项的其他包的副作用。此外,您还可以将所有依赖项保留在版本控制中。
参考资料
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
版本。)
我已经全局安装了 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 文件夹,然后从头开始安装。
通常建议不要全局安装——最好通过 devDependencies
、peerDependencies
等方式安装软件包
这是可取的,因为它避免了使用相同依赖项的其他包的副作用。此外,您还可以将所有依赖项保留在版本控制中。
参考资料
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
版本。)