如何在不修改 package.json 的情况下执行“npm update”?

Posted

技术标签:

【中文标题】如何在不修改 package.json 的情况下执行“npm update”?【英文标题】:How to do `npm update` without modifying package.json? 【发布时间】:2020-11-21 17:48:19 【问题描述】:

我有几个依赖项,它们总是需要在最新的特定主要版本上。所以我将它们添加到 package.json 依赖项列表中,如下所示:


...
  dependencies: 
    "A": "^12.0.0",
    "B": "^12.0.0",
    "C": "^12.0.0",
    ...

假设在 package-lock.json 中,包 B 的版本为 12.2.2。包 B 的新版本与版本 12.3.0 一起到达,并且不存在其他包的更新。

当我执行npm update 时,package.json 文件更改为以下内容:


...
  dependencies: 
    "A": "^12.0.0",
    "B": "12.3.0",
    "C": "^12.0.0",
    ...

我不希望这种情况发生。我希望 package-lock.jsonnode_modules 得到更新,但 package.json 对于包 B 保持不变。

我尝试了npm update --no-save,但这只会更新 node_modules 而不会更新 package-lock.json

我怎样才能做到这一点?

【问题讨论】:

你怎么会想要这个?您是否有其他想要此行为的依赖项?锁定文件在这里真的对你有帮助吗?你能只恢复对包文件的更改吗? 我希望这种情况永远发生。当我使用 tilda "^" 指定版本并执行 npm update 时,我不希望它们被锁定在我的 package.json 中的特定版本上。因为如果第二次更新到达,那么npm update 将不会获得第二次更新。现在,每当我想做npm update 时,我也需要去更新 package.json 文件。 这不是真的,因为 ^12.3.0 仍然允许从那里升级到 13 以下的任何东西 这不是我所期望的。你有任何特定的 NPM 配置设置吗? 据我所知(例如mkdir temp && cd $_ && npm init -y && npm i eslint@7.3 && jq '.dependencies.eslint' package.json && npm up eslint && jq '.dependencies.eslint' package.json,它显示"^7.3.1" 然后是"^7.5.0"不是会发生什么。请给minimal reproducible example。 【参考方案1】:

这种行为的原因是我的项目根目录中的.npmrc 配置文件。

我将.npmrc 文件更改为以下:

save-exact=false

save-exact=false 是默认配置。

现在有了修复,在我的示例中,package.json 文件在执行npm update 后应如下所示:


...
  dependencies: 
    "A": "^12.0.0",
    "B": "^12.3.0",
    "C": "^12.0.0",
    ...

【讨论】:

以上是关于如何在不修改 package.json 的情况下执行“npm update”?的主要内容,如果未能解决你的问题,请参考以下文章

NPM - 如何在不更新或添加 package.json 中描述的包的情况下安装新包

如何在不使用 create-react-app 且仅使用我自己的 Webpack 的情况下设置 package.json 进行部署?

有没有办法在不安装包的情况下按字母顺序排列 package.json?

有没有办法在不提交版本的情况下“修改版本”?

插入符号范围和 package-lock.json:如何使用它们获得最新的非破坏版本?

在 package.json 和 package-lock.json 中更新版本号而不更新依赖