前端项目依赖包中的依赖包漏洞解决方案
一般情况下,如果是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"
}
}