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

在Preact项目集成React 18组件时createRoot失效问题求助

解决Preact兼容React 18 createRoot空函数问题

核心原因

Preact的compat包对React 18的createRoot API做了单独路径处理,你的别名配置没覆盖到react-dom/client的导入,同时externals规则可能干扰了模块替换逻辑。


1. 补全Webpack别名配置

将react-dom/client直接映射到Preact的对应实现,修改resolve.alias:

resolve: {
  alias: {
    'react': 'preact/compat',
    'react-dom': 'preact/compat',
    'react-dom/client': 'preact/compat/client'
  }
}

Preact在preact/compat/client路径下提供了和React 18一致的createRoot实现,这个别名能让第三方组件的导入直接指向正确的代码。

2. 清理externals的干扰

你的externals配置中包含"runtime-react"和"runtime-react-dom",这会让Webpack跳过对这些模块的别名替换,直接从外部环境加载。如果项目不需要外部提供React相关依赖,建议移除这两项:

externals: [
  null
]

若必须保留外部依赖,需确保外部环境的runtime-react-dom包含client导出,或者给externals添加规则排除react-dom/client模块的外部化处理。

3. 优化Babel配置

你已经开启了Preact的自动JSX转换,无需再保留@babel/preset-react,避免重复处理导致的冲突:

presets: [
  "@babel/preset-env"
],
plugins: [
  [
    "@babel/plugin-transform-react-jsx",
    {
      "throwIfNamespace": true,
      "runtime": "automatic",
      "importSource": "preact"
    }
  ],
  "@babel/plugin-proposal-class-properties"
]

4. 确认Preact版本要求

Preact从10.10.0版本开始支持react-dom/client的兼容API,先检查当前版本:

npm list preact

若版本过低,执行升级命令:

npm install preact@latest preact/compat@latest

完成以上步骤后重新打包项目,createRoot即可正常调用,不会再出现空函数的问题。

内容的提问来源于stack exchange,提问作者VerityFL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:03:13