【问题标题】:Will npm try to avoid installing a deprecated package version?npm 会尝试避免安装已弃用的软件包版本吗?
【发布时间】:2022-01-14 11:38:46
【问题描述】:

我找不到任何说明 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

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

【问题讨论】:

    标签: node.js npm yarnpkg semantic-versioning


    【解决方案1】:

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

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

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

    偏爱非弃用版本而不是弃用版本。

    【讨论】:

    • 但是 includeDeprecated 标志不存在于最新的分支中。
    • 但请注意,证据不等于知道 - 除非有文档明确说明这种行为,否则明天这种行为可能会突然不同。
    • @Abhijeet 它不需要在最新的分支中,因为 npm-pick-manifest 的行为现在是默认行为。 (我已将此信息添加到我的答案中。)
    【解决方案2】:

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

    查看the documentation for dependency managementthe semver range documentation 了解可接受的语法以及它们的含义。

    【讨论】:

    • 我的问题是,即使它是与 semver 最接近的匹配,npm 会忽略不推荐使用的版本吗?
    • 这绝对是一个搜索文档的问题,如果找不到,请执行开源依赖的操作:向 npm 人员提交问题,以将该信息添加到文档中您正在寻找但找不到的地方。这样每个人都可以在他们寻找答案的第一时间找到该信息,而不是最后一个位置。
    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2012-06-13
    相关资源
    最近更新 更多