如何修复Deno中"must be declared in an enclosing class"报错?
Deno单服务器私有字段语法错误排查方案
你遇到的错误为:
$ ./api error: Uncaught SyntaxError: Private field '#h1' must be declared in an enclosing class at file://$deno$/bundle.js:3004:16
该报错核心为运行时环境不支持ES私有类字段语法,结合三台同配置服务器仅一台故障的场景,按优先级执行以下排查步骤:
- 验证实际运行的Deno版本
在故障服务器执行deno --version,确认输出版本确实为1.15.3。部分服务器会存在多版本Deno共存的情况,环境变量PATH优先级可能导致实际调用的是未声明的低版本Deno,低版本对ES私有字段的支持存在缺陷会触发该报错。 - 校验应用二进制完整性
在正常运行的服务器上执行sha256sum ./api生成文件哈希值,再在故障服务器执行同样命令,对比两个哈希值是否完全一致。如果不一致说明文件在传输到故障服务器的过程中出现损坏,重新传输完整的二进制文件即可解决。 - 清理Deno损坏缓存
如果版本和文件哈希都无异常,执行deno info查看Deno的缓存目录路径,删除缓存目录下所有bundle相关的临时文件,再重新运行应用,排除缓存损坏导致的语法解析错误。 - 确认服务器架构一致性
执行uname -m对比三台服务器的CPU架构,如果故障服务器架构和另外两台不同(比如另外两台为x86_64,故障服务器为arm架构),跨架构编译的Deno应用会出现运行时解析异常,需要针对对应架构重新编译应用。 - 本地重编验证
如果上述排查都无异常,将应用源码同步到故障服务器,在故障服务器本地重新执行编译命令后运行,排除跨设备编译带来的兼容性问题。
内容的提问来源于stack exchange,提问作者chovy
相关产品推荐
相关产品推荐

