resolutions
是一个用于解决依赖项冲突的
npm
特殊字段。在某些情况下,您的项目依赖项可能需要不同的版本,而这些版本之间可能存在冲突。这时候,您可以使用
resolutions
字段来指定应该使用哪个版本,以解决这些冲突。
例如,如果您的项目依赖于
package-a
和
package-b
,而这两个包都依赖于
package-c
,但它们依赖于
package-c
的不同版本,这会导致冲突。在这种情况下,您可以在
package.json
文件中使用
resolutions
字段来指定应该使用哪个版本。例如:
{
"dependencies": {
"package-a": "^1.0.0",
"package-b": "^2.0.0"
},
"resolutions": {
"package-c": "^1.2.0"
}
}
在这个示例中,我们指定了
package-c
的版本应该是
^1.2.0
。这意味着当
npm
安装依赖项时,它将使用
1.2.x
系列中的最新版本来解决
package-a
和
package-b
之间的冲突。
需要注意的是,
resolutions
字段只在您的项目依赖项中出现冲突时才需要使用。在大多数情况下,
npm
可以自动解决依赖项之间的冲突,而无需使用
resolutions
字段。
当某些安全扫描工具(例如fossa)扫描出项目依赖的子依赖版本需要升级的情况,也可以尝试使用此方法来解决。
在package.json文件里添加跟scripts、dependencies、evDependencies平级的resolutions,把想要强制升级的子依赖期望版本写入,scripts里添加配置”preinstall”: “npx force-resolutions”,最后像启动项目一样使用npm run preinstall运行下载,最后达成目的。
{
"name": "xxx",
"version": "1.0.0",
"description": "xxx",
"author": "xxx",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --hot --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"build": "node build/build.js",
"preinstall": "npx force-resolutions"
},
"dependencies": {
"@types/echarts": "0.0.13",
"ajv": "^6.12.6",
"awe-dnd": "^0.3.4",
"axios": "^0.26.0",
"babel-polyfill": "^6.26.0"
},
"devDependencies": {
"vue-template-compiler": "^2.6.11",
"webpack": "^3.12.0",
"webpack-bundle-analyzer": "^2.13.1",
"webpack-merge": "^4.2.2"
},
"resolutions": {
"lodash.template": "4.5.0",
"eventsource": "1.1.1",
"ms":"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
},
"engines": {
"node": ">= 12.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}