关于前端脚手架的依赖升级和去风险版本可能遇到的问题

一、升级依赖版本

1、检查过时依赖

npm outdated

2、根据具体情况,选择安全更新或全部更新到最新版本

2.1 安全更新(不破坏依赖间的联系)

npm update

2.2 全部更新到最新版本

首先输入命令:

npx npm-check-updates -u

执行完后,如果之前没安装,会提示安装 npm-check-updates 插件,输入 y 同意。

运行完成后会在控制台列出各依赖即将升级的情况,可以选择执行 npm install 来进行升级操作。

一旦执行升级操作,因为会忽略各依赖间的联系性并统一升级到最新版本,所以可能会出现升级失败的情况,此时会询问用户是否确定并加上 --force 强制升级,如果你仍然想升级,直接输入强制升级即可。

npm install --force

3、升级完成

二、npm安装依赖遇到冲突的peerDependencies

在新版本的npm中,默认情况下,npm install遇到冲突的peerDependencies时会失败。

解决办法:

使用 --force 或 --legacy-peer-deps 可解决这种情况。

--force:会无视冲突,并强制获取远端npm库资源,当有资源冲突时覆盖掉原先的版本。

--legacy-peer-deps:安装时忽略所有peerDependencies,忽视依赖冲突,采用npm版本4到版本6的样式去安装依赖,已有的依赖不会覆盖。

建议用--legacy-peer-deps 比较保险一点

在终端重新安装即可解决,会重新生成没有冲突的 package-lock.json 文件

npm install --legacy-peer-deps

三、前端脚手架的间接依赖升级为无风险版本

由于blackduck对于非java项目会对源代码进行依赖扫描,因此低版本webpack使用的开发依赖devdependencies中的间接依赖容易产生漏洞告警。

以下提供升级建议:

1、在组件库中查询间接依赖,库中存在无风险版本情况

npm ls @xxx

使用 npm ls <依赖>  这条命令,会搜索出指定依赖结构,因间接依赖低版本 @xxx 导致漏洞告警,修复建议以组件库建议为准。

根据组件库无风险版本,在 package-lock.json 文件中指定间接依赖的大版本或具体版本号,使用npm update <依赖> 升级指定依赖

npm update @xxx

将package-lock.json替换至代码库中

如发生npm install后 package-lock.json 发生变化,请升级npm版本至最新

不同 npm 版本下 npm i 的规则

  • npm 5.0.x 版本:不管 package.json 中依赖是否有更新,npm i 都会根据 package-lock.json 下载。针对这种安装策略,有人提出了这个 issue - #16866 ,然后就演变成了 5.1.0 版本后的规则。

  • 5.1.0 版本后:当 package.json 中的依赖项有新版本时,npm install 会无视 package-lock.json 去下载新版本的依赖项并且更新 package-lock.json。针对这种安装策略,又有人提出了一个 issue - #17979 ,参考 npm 贡献者 iarna 的评论,得出 5.4.2 版本后的规则。

  • 5.4.2 版本后:
  • 如果只有一个 package.json 文件,运行 npm i 会根据它生成一个 package-lock.json 文件。
  • 如果 package.json 的 semver-range version 和 package-lock.json 中版本兼容,即使此时 package.json 中有新的版本,执行 npm i 也还是会根据 package-lock.json 下载 - 实践场景1。
  •  如果手动修改了 package.json 的 version ranges,且和 package-lock.json 中版本不兼容,那么执行 npm i 时 package-lock.json 将会更新到兼容 package.json 的版本 - 实践场景2。

2、间接依赖的最新版本仍为风险版本或所有版本均为风险版本情况

在流水线的编译前脚本中的npm run build 后添加以下命令,确保开发依赖不进入生产。

rm -rf node_modules

npm install --production

 

四、直接依赖漏洞修复

npm audit

该命令是npm6新增的,可以允许开发人员分析复杂的代码并查明特定的漏洞。

npm audit 需要包 package.json 和 package-lock.json 文件。它是通过分析 package-lock.json 文件,继而扫描我们的包分析是否包含漏洞的。

返回的漏洞数据来源于 Github Advisory Database。

使用该命令必须用npm原始源,如果有已知漏洞,会展示该漏洞的信息(包括漏洞涉及问题、漏洞危险等级、所在依赖包、依赖包的依赖层级、详细信息等)

npm audit 衍生命令

# 扫描项目漏洞把不安全的依赖项自动更新到兼容性版本
npm audit fix

# 在不修改 node_modules 的情况下执行 audit fix,仍然会更改 pkglock
npm audit fix --package-lock-only

# 跳过更新 devDependencies
npm audit fix --only=prod

# 强制执行 audit fix 安装最新的依赖项(toplevel)
npm audit fix --force

# 单纯的获取 audit fix 会做的事,并以 json 格式输出。
npm audit fix --dry-run --json

# 获取详情
npm audit

# 以 JSON 格式打印报告
npm audit --json

# 安装单个包关闭安全审查:
npm install example-package-name --no-audit
# 安装所有包关闭安全审查 - 运行
npm set audit false - 手动将 ~/.npmrc 配置文件中的 audit 修改为 false

你可能感兴趣的:(Vue,webpack,NPM,vue.js,前端,javascript,npm,前端框架,node.js,webpack)