Deno+Svelte+EsBuild遇Uncaught TypeError: Cannot read properties of undefined (reading '$$')
问题解决:Deno + Svelte + esbuild 出现
Uncaught TypeError: Cannot read properties of undefined (reading '$$') 这个错误本质是组件编译后运行时缺少Svelte内部核心对象,主要由版本不兼容或构建配置错误导致,以下是针对性修复方案:
1. 强制对齐Svelte与esbuild-svelte版本
esbuild-svelte对Svelte版本有严格依赖,不同插件版本必须匹配对应Svelte主版本(比如3.x插件对应Svelte 3,4.x插件对应Svelte 4)。在Deno中直接指定兼容版本:
// 导入指定版本的Svelte(示例为3.59.1,需和esbuild-svelte版本匹配) import svelte from 'npm:svelte@3.59.1'; // 导入对应兼容的esbuild-svelte版本 import sveltePlugin from 'npm:esbuild-svelte@0.8.1';
然后在插件配置中显式传入Svelte实例,确保插件使用正确版本:
plugins: [sveltePlugin({ preprocess: [typescript()], svelte: svelte // 绑定指定的Svelte版本 })],
2. 升级esbuild到稳定新版本
你当前使用的esbuild@v0.11.12过于老旧,和新版esbuild-svelte存在兼容性断层。建议升级到近期稳定版,比如:
import * as esbuild from 'https://deno.land/x/esbuild@v0.20.2/mod.js';
3. 移除不必要的类型断言
代码中(sveltePlugin as unknown as Function)的强制类型转换可能掩盖真实的导入错误。如果Deno类型检查报错,直接添加// @ts-ignore跳过即可,无需强制转成Function:
plugins: [ // @ts-ignore 跳过Deno的类型检查 sveltePlugin({ preprocess: [typescript()] }) ],
4. 验证自定义TypeScript预处理器
你重写的typescript()预处理器必须确保输出符合Svelte编译要求:
- 正确处理Svelte script标签中的TypeScript语法
- 生成标准JavaScript代码,保留Svelte所需的组件结构
如果预处理器逻辑有误,会导致组件编译不完整,运行时缺失$$核心对象。
内容的提问来源于stack exchange,提问作者tsaxking
相关产品推荐
相关产品推荐

