从CRA迁移至Vite后出现Braze相关TypeError问题求助
问题:React从CRA迁移到Vite后出现Braze相关报错
迁移完成后触发以下错误:
Uncaught TypeError: Class extends value undefined is not a constructor or null at html-message.js:2:1
注意到html-message.js不在项目源码中,也未在node_modules目录下找到,浏览器调试工具显示该文件源码如下:
import InAppMessage from './in-app-message.js'; export default class HtmlMessage extends InAppMessage { constructor(l, u, n, e, r, s, t, i, o, a, c) { super( l, null, null, u, n, null, null, null, (e = e || InAppMessage.DismissType.MANUAL), r, null, null, null, null, null, null, null, null, s, t, null, null, null, i, void 0, void 0, void 0, o, a ), (this.messageFields = c); } ll() { return !1; } k(l) { if (this.Ce === InAppMessage.es.ul) { if (this.nl) return !1; this.nl = !0; } return this.lt.St(l), !0; } }
已确认错误来自Braze,求可行的解决思路。
解决思路
- 升级Braze SDK版本:Vite的模块解析逻辑和CRA差异较大,旧版Braze SDK可能未适配ES模块规范。直接升级到最新版的Braze React/Web SDK,多数情况下能解决模块导入导致的
undefined问题。 - 配置Vite依赖预编译:在
vite.config.js中将Braze相关包加入optimizeDeps.include,强制Vite预编译这些依赖,避免路径解析或动态加载异常:import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], optimizeDeps: { include: ['@braze/web-sdk', '@braze/react-sdk'] } }); - 规范Braze导入方式:检查项目中引入Braze的代码,严格遵循官方文档的导入规范,避免直接导入Braze内部的深层模块(比如示例中的
in-app-message.js这类未对外暴露的文件)。 - 临时关闭Tree-shaking排查:如果上述方法无效,可临时在
vite.config.js中关闭生产环境的tree-shaking,确认是否是tree-shaking误删了Braze的必要模块:export default defineConfig({ build: { rollupOptions: { treeshake: false } } }); - 调整Braze初始化时机:确保Braze SDK在React组件挂载前完成初始化,避免组件渲染时SDK模块尚未加载完成,导致继承的父类
InAppMessage为undefined。
内容的提问来源于stack exchange,提问作者Gregoris Baxtsevanos
相关产品推荐
相关产品推荐

