zrender TypeError: “x“ is not a constructor

在使用Zrender时遇到init方法报错,经过排查发现是由于tree-shaking导致registerPainter方法丢失。通过手动导入并注册Painter类,问题得到解决。项目已上线并开源。

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间

我是调用zrender的init方法报错,如下图:
在这里插入图片描述

然后经过大佬指点,这种开发环境没问题但生产环境报错的东西,一般是因为打包的时候被tree-shaking掉了。

debug+翻看源码后发现丢失调的是registerPainter方法
在这里插入图片描述

模仿源码去调用:
在这里插入图片描述

import {
   
    init } from "zrender";
import {
   
    registerPainter 
`Uncaught in promise TypeError: Clz is not a constructor` 错误通常意味着在 Promise 内部尝试将一个非构造函数的值作为构造函数来使用。以下是一些可能的解决方法: #### 检查构造函数的引入和定义 确保 `Clz` 被正确定义和引入。如果是从其他模块引入的,检查引入路径和引入名是否正确。 ```javascript // 示例:正确引入构造函数 import Clz from './path/to/Clz'; async function someAsyncFunction() { try { const instance = new Clz(); // 其他逻辑 } catch (error) { console.error(error); } } someAsyncFunction(); ``` #### 检查变量赋值 确保 `Clz` 没有被意外赋值为非构造函数类型的值。可以在使用前进行类型检查。 ```javascript // 示例:类型检查 let Clz; // 假设这里有赋值操作 Clz = 'not a constructor'; async function someAsyncFunction() { if (typeof Clz === 'function') { const instance = new Clz(); // 其他逻辑 } else { console.error('Clz is not a constructor'); } } someAsyncFunction(); ``` #### 调试和日志输出 在出现错误的位置添加日志输出,查看 `Clz` 的实际值。 ```javascript async function someAsyncFunction() { console.log('Clz value:', Clz); try { const instance = new Clz(); // 其他逻辑 } catch (error) { console.error(error); } } someAsyncFunction(); ``` #### 检查异步加载 如果 `Clz` 是通过异步加载获取的,确保在使用之前已经加载完成。 ```javascript // 示例:异步加载模块 async function loadModule() { const { Clz } = await import('./path/to/Clz'); if (typeof Clz === 'function') { const instance = new Clz(); // 其他逻辑 } else { console.error('Clz is not a constructor'); } } loadModule(); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值