【问题标题】:npm-force-resolutions not working when installing a new package安装新软件包时 npm-force-resolutions 不起作用
【发布时间】:2021-02-12 18:20:13
【问题描述】:

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

"preinstall": "npx npm-force-resolutions"

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

"resolutions": {
  "graceful-fs": "^4.2.4",
},

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

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

我也尝试将分辨率设置得更具体,比如

"resolutions": {
  "glob/**/graceful-fs": "^4.2.4",
},

但这无济于事。

我也试过了:

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

但没有运气。

我错过了什么?

【问题讨论】:

  • 嘿,你有没有机会找到解决方案?我遇到了同样的问题
  • 我认为没有其他方法可以解决这个问题,除非您远离依赖它的那些包或这些包得到更新。
  • 我没有答案,但我可以为您节省一些时间。什么对我有用 - 安装软件包后我不必清除 node_modules 文件夹。我所要做的就是在之后输入npm i,它会进行修复。仍然很烦人,但至少您不必先清除整个文件夹。

标签: node.js npm dependencies npm-install npm-scripts


【解决方案1】:

如果以上所有答案都不起作用并且您仍然得到sh: npm-force-resolutions: command not found 尝试以下方法:

只是改变:

"preinstall": "npx npm-force-resolutions"

收件人:

"preinstall": "npx force-resolutions"

npx force-resolutions 在未检测到 package-lock.json 时不会运行,并允许正常执行下一个内联命令

归功于:https://github.com/rogeriochaves/npm-force-resolutions/issues/10#issuecomment-885458937

【讨论】:

    【解决方案2】:

    最好的办法是将preinstall 脚本改成这样:

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

    这只会在您的初始 package-lock.json 尚不存在时运行 npm install 来创建它。
    这比总是同时运行 (npm + npx)快得多

    【讨论】:

    • 这是我为此找到的最佳解决方案。谢谢。
    • 我发现在极端情况下(指定 tarball version à la stackoverflow.com/a/69591894/132735preinstall 路线不起作用并最终手动运行 npx npm-force-resolutions 和 @ 987654329@ing 更改后的lockfile
    【解决方案3】:

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

    "resolutions": {
      "graceful-fs": "4.2.4",
    },
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 更多关于这个解决方法的讨论可以在here找到。
      【解决方案5】:

      嗨@NthDegree,对我有用的唯一方法是首先运行正常的 npm install 然后将 packages-lock.json 文件添加到 git。在添加“preinstall”:“npx npm-force-resolutions”之后,它总是将依赖解析更新到提到的版本。

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

      【讨论】:

      • 一定要将 package-lock.json 文件添加到 git
      • packages-lock.json 用于源代码管理。请参阅stackoverflow.com/a/44210813/1183010 此外,请参阅my answer 对解决“packages-lock.json”不存在问题的preinstall 脚本进行微调。
      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      相关资源
      最近更新 更多