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

时间:2020-10-30 09:34:29

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

我正在使用 if (dic.keySet().contains(line2[commonCol]) { //Get the whole line from the first file. String firstPart = dic.get(line2[commonCol]); //Gets the line from the second file, without the common column. String secondPart = String.join (Arrays.copyOfRange(line2, 1, line2.length -1), ","); // Join together and put in Hashmap. dic.put(line2[commonCol], String.join (firstPart, secondPart)); } else { // create a new entry and pre-pend it with default values // for the columns of file1 String firstPart = String.join(",","some", "default", "values") String secondPart = String.join (Arrays.copyOfRange(line2, 1, line2.length -1), ","); dic.put(line2[commonCol], String.join (firstPart, secondPart)); } 的脚本部分来强制解决问题:

package.json

在“解决方案”部分,我输入了具有指定版本的"preinstall": "npx npm-force-resolutions"

graceful-fs

当我运行"resolutions": { "graceful-fs": "^4.2.4", }, 时,所有内容均已正确安装,因此会考虑设置的版本。但是后来当我安装附加模块时,例如npm i,我设置的版本被扔掉了,在某些依赖项中我遇到了npm i random-package和其他低版本。

如果我清除了node_modules文件夹并再次运行graceful-fs@1.2.3,一切都会恢复正常。

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

npm i

但这没有帮助。

我也尝试过:

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

但没有运气。

我想念什么?

4 个答案:

答案 0 :(得分:4)

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

<块引用>

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

答案 1 :(得分:0)

嗨,@ NthDegree对我而言唯一有效的方法是先运行正常的npm安装,然后将packages-lock.json文件添加到git中。完成此操作后,当您添加“ preinstall”:“ npx npm-force-resolutions”时,它将始终将依赖项分辨率更新为提到的版本。

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

答案 2 :(得分:0)

在分辨率部分,您必须修复版本

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

答案 3 :(得分:0)

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

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

当您的初始 package-lock.json 不存在时,它会运行 npm install 来创建它。