You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:10:27