使用Deno+TypeScript开发Discord机器人出现reflect-metadata导入错误如何解决
错误触发原因
Deno的ESM模块解析规则与Node.js不同,不支持无路径前缀的裸模块导入(比如直接写import "reflect-metadata"),所有导入路径必须是完整远程URL,或是带/、./、../前缀的相对/绝对路径。
你使用的unpkg源的discordx包是面向Node.js环境编译的版本,内部依赖reflect-metadata时用了Node.js支持的裸导入写法,不符合Deno的导入规范,因此触发路径校验报错。
解决方案
推荐使用discordx官方适配Deno环境的发布源配合导入映射配置,步骤如下:
- 新建项目根目录下的
deno.json配置文件,开启装饰器语法支持,同时配置导入映射:
{ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true }, "imports": { "discordx": "https://deno.land/x/discordx@9.0.1/mod.ts", "reflect-metadata": "https://deno.land/x/reflect_metadata@v0.1.13/mod.ts" } }
- 修改你的入口代码,在最顶部优先导入
reflect-metadata依赖:
import "reflect-metadata"; import { Client } from "discordx"; const client: Client = new Client({ intents: ["GUILDS", "GUILD_MESSAGES"], }); console.log("done");
- 运行代码时添加Deno所需的权限参数:
deno run --allow-net --allow-env 你的入口文件名.ts
完成以上配置后即可正常加载discordx及其依赖,完成开发环境初始化。
内容的提问来源于stack exchange,提问作者shestakov-dev
相关产品推荐
相关产品推荐

