【问题标题】:How to do `npm update` without modifying package.json?如何在不修改 package.json 的情况下执行“npm update”?
【发布时间】: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

标签: npm npm-install npm-update


【解决方案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",
    ...

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 2017-11-03
    • 2019-01-25
    • 2013-01-30
    • 2019-07-01
    • 1970-01-01
    • 2023-04-02
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多