preact-cli默认项目无法运行,Node v18.12.1遇加密哈希错误
解决Node.js 18下Preact项目启动的
digital envelope routines::unsupported错误 问题描述
使用preact-cli创建并启动Preact项目时执行以下步骤:
npx preact-cli create default my-project cd my-project npm install # 非必需 npm run dev
出现如下错误:
Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10)
环境版本:
- npx/npm 8.12.1
- Node.js v18.12.1
- 操作系统:Pop!_OS 22.04 LTS
已确认使用最新版preact-cli(3.4.4),且不想降级Node.js,复制Stackblitz在线示例的package-lock.json后问题仍存在。
原因分析
该错误源于Node.js 17及以上版本默认启用了OpenSSL 3.0的加密算法,而preact-cli 3.4.4依赖的webpack 4.x版本使用的哈希算法与新算法不兼容,导致启动失败。
解决方案(无需降级Node.js)
方法1:临时终端启动命令
在启动命令前添加兼容环境变量,直接执行:
NODE_OPTIONS=--openssl-legacy-provider npm run dev
方法2:修改package.json启动脚本
编辑项目根目录的package.json,修改scripts中的dev命令:
"scripts": { "dev": "NODE_OPTIONS=--openssl-legacy-provider preact watch", "build": "preact build", "serve": "preact serve" }
保存后执行npm run dev即可正常启动项目。
方法3:全局设置环境变量(不推荐)
若希望所有Node.js项目都适配该兼容模式,可在shell配置文件(如~/.bashrc或~/.zshrc)中添加:
export NODE_OPTIONS=--openssl-legacy-provider
执行source ~/.bashrc(对应自己的shell配置文件)使设置生效。此方法会影响所有Node进程,可能引发其他兼容性问题,谨慎使用。
补充说明
Stackblitz在线环境可正常运行,是因为其容器默认配置了兼容选项或使用了适配后的Node环境。当前preact-cli 3.4.4暂未升级到依赖webpack 5的版本(webpack 5已适配Node.js 18的OpenSSL 3.0),待后续版本更新后,该问题会自动解决。
内容的提问来源于stack exchange,提问作者lhk
相关产品推荐
相关产品推荐

