执行npm run dev时遇new _Hash相关ERR_OSSL_EVP_UNSUPPORTED错误求助
解决Nuxt v2.15.8启动时出现的ERR_OSSL_EVP_UNSUPPORTED错误
错误原因
Node.js 17及以上版本默认采用OpenSSL 3.0,启用了更严格的算法要求,而Nuxt v2.15.8依赖的Webpack 4.x版本不支持这些新算法,导致构建时哈希创建失败,抛出error:0308010C:digital envelope routines::unsupported错误。
解决方案
1. 临时指定环境变量启动
根据操作系统不同,执行对应命令:
- Windows(命令提示符cmd):
set NODE_OPTIONS=--openssl-legacy-provider && npm run dev - Windows(PowerShell):
$env:NODE_OPTIONS="--openssl-legacy-provider"; npm run dev - macOS/Linux:
NODE_OPTIONS=--openssl-legacy-provider npm run dev
2. 修改package.json的启动脚本
修改package.json中的scripts字段,把环境变量固定到命令里,避免每次手动输入:
{ "scripts": { "dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt", "build": "NODE_OPTIONS=--openssl-legacy-provider nuxt build", "start": "NODE_OPTIONS=--openssl-legacy-provider nuxt start" } }
Windows用户若使用cmd,需调整为:
{ "scripts": { "dev": "set NODE_OPTIONS=--openssl-legacy-provider && nuxt", "build": "set NODE_OPTIONS=--openssl-legacy-provider && nuxt build", "start": "set NODE_OPTIONS=--openssl-legacy-provider && nuxt start" } }
3. 降级Node.js版本
如果不想修改环境变量,可以将Node.js降级到16.x或更低的LTS版本,推荐使用nvm(Node版本管理器)进行版本切换:
- 安装nvm后,执行以下命令安装并切换到16.x版本:
nvm install 16 nvm use 16
错误日志参考
╭───────────────────────────────────────╮ │ │ │ Nuxt @ v2.15.8 │ │ │ │ ▸ 环境:开发环境 │ │ ▸ 渲染模式:服务端渲染 │ │ ▸ 目标:服务器 │ │ │ │ 监听地址:http://localhost:3000/ │ │ │ ╰───────────────────────────────────────╯ i 为开发环境准备项目 17:35:26 i 初始构建可能需要一段时间 17:35:26 i 发现组件:.nuxt/components/readme.md 17:35:26 √ 构建器初始化完成 17:35:26 √ Nuxt文件生成完成 17:35:26 * 客户端 █████████████████████████ 构建中(10%)1/2个模块 1个活跃 node_modules\webpack-hot-middleware\client.js * 服务端 █████████████████████████ 构建中(10%)1/1个模块 0个活跃 node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen); ^ 错误: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10) at module.exports (F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\lib\util\createHash.js:135:53) at NormalModule._initBuildHash (F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\lib\NormalModule.js:417:16) at handleParseError (F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\lib\NormalModule.js:471:10) at F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\lib\NormalModule.js:503:5 at F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\lib\NormalModule.js:358:12 at F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\web at iterateNormalLoaders (F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\node_modules\loader-runner\lib\LoaderRunner.js:214:10) at Array.<anonymous> (F:\1.A software Company careers test\CyberElysium\test\todo-nuxt\node_modules\webpack\node_modules\loader-runner\lib\LoaderRunner.js:205:4) { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' }
内容的提问来源于stack exchange,提问作者Noor Muhammed
相关产品推荐
相关产品推荐

