Nuxt.js localhost:3000无法启动,请求问题排查建议
问题:Nuxt.js项目启动失败,报错ERR_OSSL_EVP_UNSUPPORTED
我正从React转向Vue.js,运行Nuxt.js项目时localhost:3000无法启动,收到如下错误信息,服务器存在问题。以下是项目的安装流程和执行npm run dev时的报错信息,求分析问题原因?
安装流程
create-nuxt-app v5.0.0 ✨ Generating Nuxt.js project in cryptocheck24.org ? Project name: cryptocheck24.org ? Programming language: JavaScript ? Package manager: Npm ? UI framework: None ? Template engine: HTML ? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Testing framework: Jest ? Rendering mode: Universal (SSR / SSG) ? Deployment target: Server (Node.js hosting) ? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Continuous integration: None ? Version control system: Git
错误信息
> cryptocheck24.org@1.0.0 dev > nuxt ╭───────────────────────────────────────╮ │ │ │ Nuxt @ v2.15.8 │ │ │ │ ▸ Environment: development │ │ ▸ Rendering: server-side │ │ ▸ Target: server │ │ │ │ Listening: http://localhost:3000/ │ │ │ ╰───────────────────────────────────────╯ ℹ Preparing project for development 16:25:39 ℹ Initial build may take a while 16:25:39 ℹ Discovered Components: .nuxt/components/readme.md 16:25:39 ✔ Builder initialized 16:25:39 ✔ Nuxt files generated 16:25:39 ● Client █████████████████████████ compiling (0%) ◯ Server node:internal/crypto/hash:67 this[kHandle] = new _Hash(algorithm, xofLen); ^ Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at module.exports (/Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/lib/util/createHash.js:135:53) at NormalModule._initBuildHash (/Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/lib/NormalModule.js:417:16) at handleParseError (/Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/lib/NormalModule.js:471:10) at /Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/lib/NormalModule.js:503:5 at /Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/lib/NormalModule.js:358:12 at /Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/Users/remo/Desktop/cryptocheck24.org/node_modules/webpack/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at Array.<anonymous> (/Users/remo/Desktop/cryptocheck24.org/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' }
问题原因与解决方案
这个错误是因为你使用的Node.js版本(v17及以上)默认启用了OpenSSL 3.0,而Nuxt 2.x依赖的Webpack版本不支持新的哈希算法,导致兼容性冲突。
解决办法:
- 临时启动方案:在启动命令前添加环境变量,指定旧的哈希算法
- Windows(命令提示符):
set NODE_OPTIONS=--openssl-legacy-provider && npm run dev - macOS/Linux(终端):
NODE_OPTIONS=--openssl-legacy-provider npm run dev
- Windows(命令提示符):
- 永久修改启动脚本:打开项目根目录的
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" } - 降级Node.js版本:如果不想修改脚本,可以把Node.js降级到v16.x及以下版本,该版本使用OpenSSL 1.1.1,不会出现此兼容性问题。
内容的提问来源于stack exchange,提问作者Remo Furrer
相关产品推荐
相关产品推荐

