Node.js从14升级至20遇digital envelope routines错误的解决求助
解决Node.js 20升级时"digital envelope routines::unsupported"报错的方案
方案一:临时兼容旧SSL算法(快速修复)
这个方案无需修改依赖,仅通过环境变量让Node.js兼容旧的加密逻辑:
- 在CI/CD流水线的环境配置中添加变量:
NODE_OPTIONS="--openssl-legacy-provider" - 或者修改
package.json中的启动/构建脚本,给相关命令添加前缀,例如:"start:client": "NODE_OPTIONS=\"--openssl-legacy-provider\" run-p lerna:watch lerna:serve", "lerna:build:ci": "NODE_OPTIONS=\"--openssl-legacy-provider\" lerna run lerna:build --ci"
方案二:升级核心构建依赖(长期根治)
报错本质是旧版本的Webpack、Lerna等工具不兼容Node.js 20的新加密标准,需升级核心依赖:
- 升级Webpack生态:将Webpack 4升级到5.x,同步更新配套工具:
同时升级相关插件(如npm install webpack@latest webpack-cli@latest webpack-dev-server@latest --save-devcopy-webpack-plugin、fork-ts-checker-webpack-plugin)到支持Webpack 5的版本 - 升级Babel依赖:将
@babel/core、@babel/preset-react等升级到7.24+版本,适配Node.js 20语法 - 升级Lerna:当前使用的Lerna 3.22.1版本较老,升级到6.x或7.x稳定版,适配Node.js 20
- 升级TypeScript:将TypeScript从4.4.3升级到5.x版本,提升对新Node.js版本的支持
方案三:分阶段升级Node.js版本(降低风险)
跳过跨度较大的版本升级,逐步过渡:
- 第一阶段:将环境切换到Node.js 16 + npm 8,验证项目构建、测试全流程正常
- 第二阶段:升级到Node.js 18 + npm 9,处理中间版本的兼容性问题
- 第三阶段:最终升级到Node.js 20,此时多数依赖已完成适配,报错概率大幅降低
注意事项
- 依赖升级完成后,必须在本地验证所有脚本(
build、test、start等)的功能正常 - CI/CD流水线需同步更新Node.js和npm版本,确保环境一致
- 升级Lerna后,需重新执行
lerna bootstrap确保依赖安装正确
内容的提问来源于stack exchange,提问作者Nagarjun
相关产品推荐
相关产品推荐

