Node.js v18运行Angular 8旧项目报错的解决办法咨询
Angular 8项目启动失败(ERR_OSSL_EVP_UNSUPPORTED)问题解决
问题背景
从GitHub下载旧Angular 8项目后,执行npm install安装依赖,运行ng serve时出现以下错误:
C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient>ng serve 10% building 3/3 modules 0 activei 「wds」: Project is running at http://localhost:4200/webpack-dev-server/ i 「wds」: webpack output is served from / i 「wds」: 404s will fallback to //index.html 10% building 3/4 modules 1 active ...pack-dev-server\client\index.js?http://0.0.0.0:0/sockjs-node&sockPath=/sockjs-nodenode:internal/crypto/hash:69 this[kHandle] = new _Hash(algorithm, xofLen); ^ Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:69:19) at Object.createHash (node:crypto:133:10) at module.exports (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\util\createHash.js:135:53) at NormalModule._initBuildHash (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\NormalModule.js:412:16) at C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\NormalModule.js:444:10) at C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\NormalModule.js:320:13) at C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\loader-runner\lib\LoaderRunner.js:367:11) at C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\loader-runner\lib\LoaderRunner.js:203:19) at VirtualFileSystemDecorator.readFile (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\@ngtools\webpack\src\virtual_file_system_decorator.js:46:13) at processResource (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\loader-runner\lib\LoaderRunner.js:202:11) at iteratePitchingLoaders (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\loader-runner\lib\LoaderRunner.js:158:10) at runLoaders (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\loader-runner\lib\LoaderRunner.js:365:2) at NormalModule.doBuild (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\NormalModule.js:292:3) at NormalModule.build (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\NormalModule.js:438:15) at Compilation.buildModule (C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\Compilation.js:702:10) at C:\Users\Fozle Rabbi\Desktop\Folder GIt\AngularFuelSensor\FuelSensorClient\node_modules\webpack\lib\Compilation.js:944:14 { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' } Node.js v18.20.3
错误核心原因是Angular 8依赖的旧版Webpack与Node.js 18默认启用的新加密算法不兼容。
用户问题
- 能否在Node.js v18环境下解决该错误?
- 若需降级Node.js,哪个版本最适配Angular 8项目?
解决方案
1. Node.js v18环境下的修复方法
通过设置环境变量让Node.js启用旧版加密算法兼容模式:
Windows(CMD命令行)
set NODE_OPTIONS=--openssl-legacy-provider ng serve
Windows(PowerShell)
$env:NODE_OPTIONS="--openssl-legacy-provider" ng serve
macOS/Linux
export NODE_OPTIONS=--openssl-legacy-provider ng serve
永久配置:修改项目package.json的启动脚本,避免每次手动设置:
"scripts": { "start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve" // Windows环境 // 或 "start": "export NODE_OPTIONS=--openssl-legacy-provider && ng serve" // macOS/Linux环境 }
之后直接运行npm start即可启动项目。
2. 适配Angular 8的Node.js版本
Angular 8官方推荐使用Node.js 10.x或12.x LTS版本,其中Node.js 12.x是更后期的LTS版本,兼容性和稳定性更好(优先选择12.22.12这类最终LTS版本)。
可以通过Node版本管理器(nvm)快速切换版本:
- 安装nvm后执行:
nvm install 12.22.12 - 切换到该版本:
nvm use 12.22.12
内容的提问来源于stack exchange,提问作者Fozle Rabbi
相关产品推荐
相关产品推荐

