如何在不修改 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.json 和 node_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?