我需要在嵌套依赖项中强制使用特定的包版本。对于这样的事情,npm-force-resolutions工作得很好。一个典型的解决方案是将script、"preinstall": "npx npm-force-resolutions"和"resolutions": {}添加到包名列表中作为键,版本作为值。
例如,如果我们在node-fetch的^1.7.3上有一个嵌套的依赖项,但在^2.6.1需要它,那么提取的package.json脚本可能如下所示:
{
"scripts": {
"preinstall": "npx npm-force-resolutions"
},
"resolutions": {
"node-fetch": "^2.6.1"
}
}我面临的问题是,由于环境中的安全原因,我无法访问npx。我想出的一个解决方案是将npm-force-resolutions安装为一个dev依赖项,然后将./node_modules/.bin/npm-force-resolutions作为postinstall script添加到package.json文件中:
{
"scripts": {
"postinstall": "./node_modules/.bin/npm-force-resolutions"
},
"resolutions": {
"node-fetch": "^2.6.1"
}
}可悲的是,在运行npm install之后,解决方案没有被更新(在上面的示例中,node-fetch仍然在^1.7.3上)。但是,一旦npm完成了所有软件包的安装,手动运行./node_modules/.bin/npm-force-resolutions确实会强制执行预期的解析(将上面的node-fetch从^1.7.3更改为^2.6.1)。
是否有一种方法在安装生命周期内强制执行决议,但不调用npx?重要的是,它发生在对npm install的单个调用中,因为它涉及到持续集成。
发布于 2022-01-14 05:09:37
也许这不是最好的解决方案,但您可以尝试安装该依赖项并在预安装钩子中运行它,而不是运行npx:
"preinstall": "npm i npm-force-resolutions && ./node_modules/.bin/npm-force-resolutions",https://stackoverflow.com/questions/67741418
复制相似问题