安装新软件包时 npm-force-resolutions 不起作用

Nth*_*ree 9 dependencies node.js npm npm-install npm-scripts

我正在使用的脚本部分package.json来强制解决方案:

"preinstall": "npx npm-force-resolutions"
Run Code Online (Sandbox Code Playgroud)

在分辨率部分,我输入graceful-fs了指定的版本:

"resolutions": {
  "graceful-fs": "^4.2.4",
},
Run Code Online (Sandbox Code Playgroud)

当我运行npm i一切都正确安装时,会考虑设置版本。但是后来当我安装一个额外的模块时,例如npm i random-package,我的设置版本被扔掉了,我最终得到graceful-fs@1.2.3了一些依赖项中的其他低版本。

如果我清除 node_modules 文件夹并npm i再次运行,一切都会再次正常。

我还尝试将分辨率设置得更具体,例如

"resolutions": {
  "glob/**/graceful-fs": "^4.2.4",
},
Run Code Online (Sandbox Code Playgroud)

但这无济于事。

我也试过:

  • 将模块添加为依赖项、devDependency 或 peerDependency
  • 使用收缩包装并将其覆盖在那里

但没有运气。

我错过了什么?

R. *_*olt 15

最好的方法是将preinstall脚本更改为:

"preinstall": "([ ! -f package-lock.json ] && npm install --package-lock-only --ignore-scripts --no-audit); npx npm-force-resolutions"
Run Code Online (Sandbox Code Playgroud)

npm install仅当初始 package-lock.json 尚不存在时,才会运行它来创建它。
这比总是运行两者(npm + npx)要快得多。

从 npm 8.3.0 开始,您还可以使用 npm 的override

{
  "overrides": {
    "graceful-fs": "^4.2.4"
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

在解决方案部分,您必须修复版本

"resolutions": {
  "graceful-fs": "4.2.4",
},
Run Code Online (Sandbox Code Playgroud)


Kam*_*zyk 5

我自动执行此操作的最佳解决方案是如上所述修改预安装脚本:

"preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions",


Mud*_*auf 4

@NthDegree,您好,对我有用的唯一方法是首先运行正常的 npm install,然后将 packages-lock.json 文件添加到 git。执行此操作后,当您添加 "preinstall": "npx npm-force-resolutions" 时,它始终将依赖项解析更新为提到的版本。

我不确定将 packages-lock.json 文件添加到 git 是好还是坏,但是通过使用这种方法,CI/CD 管道也可以工作。

  • 一定将 package-lock.json 文件添加到 git (8认同)