一般情况下,如果是package.json文件中的依赖包出现漏洞,我们可以直接到最新版本或者指定版本即可。
还有一种情况就是依赖包中的子依赖包甚至更深层级的包存在漏洞,这个时候改最外层包的版本并不能解决这个问题。
以下方案可以实现强制升级子包依赖,代码供参考:
1、正常提交package-lock.json文件到代码库
2、在package.json文件中的scripts配置项添加如下命令:
"preinstall": "npx force-resolutions"
或
"preinstall": "npx npm-force-resolutions"
如果上述命令报错可使用以下命令:
"preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions"
3、在package.json文件中的resolutions配置项中添加需要升级的依赖版本,比如unset-value的无漏洞版本 为2.0.1,那么我们可以配置如下:
"resolutions": {"unset-value": "2.0.1"}
4、本地执行npm i 后提交package-lock.json文件
整个package.json文件看起来应该像这样:
{"name": "xxx-web","version": "0.1.0","private": true,"scripts": {"start": "npm run serve","serve": "vue-cli-service serve","build": "vue-cli-service build","lint": "vue-cli-service lint","preinstall": "npx npm-force-resolutions",},"dependencies": {"axios": "0.24.0","core-js": "3.19.1","echarts": "5.2.1",...},"devDependencies": {"@vue/cli-plugin-babel": "4.5.15","@vue/cli-plugin-eslint": "4.5.15","@vue/cli-plugin-router": "4.5.15",...},"resolutions": {"unset-value": "2.0.1"}
}