npm 会尝试避免安装已弃用的软件包版本吗?

Will npm try to avoid installing a deprecated package version?

我找不到任何说明 npm 不会尝试安装已弃用的软件包版本的文档。

示例:

2.0.0-beta.2  2.0.0-beta.5  2.0.0-rc.9

所以如果我安装 ^2.0.0-beta.2,它将解析为 2.0.0-rc.9

如果我弃用 2.0.0-rc.9

2.0.0-beta.2  2.0.0-beta.5  2.0.0-rc.9
                           (deprecated)

现在如果我安装 ^2.0.0-beta.2,它将解析为 2.0.0-beta.5

但我找不到任何证明此行为的文档。有人可以帮忙验证一下吗?

NPM 将根据您对每个依赖项的 package.json 规则执行您告诉它要做的任何事情。如果您使用 ^ 作为版本前缀,那么是的:您确实告诉 NPM 使用“最新的次要版本”。

查看 the documentation for dependency management and the semver range documentation 以了解可接受的语法及其含义。

我测试并确认,如果有其他版本可以使用,它确实会忽略已弃用的版本。 (我暂时弃用了 metal-name 1.3.1 版,然后 运行 npm install metal-name@1。它安装了 1.3.0 版而不是 1.3.1 版。当我删除 1.3.1 版的弃用时,它当我 运行 npm install metal-name@1.

时回到安装 1.3.1

我找不到 npm CLI 文档中提到的这种行为。但是,我可以找到它 mentioned in the commit log for the npm CLI client.

npm 使用 npm-pick-manifest 来确定要安装的内容。该模块的自述文件说:

Prefers non-deprecated versions to deprecated versions.