Discord.js分片管理器无法识别TypeScript文件问题求助
问题描述
我正在为TypeScript开发的Discord机器人配置分片系统,但配置主文件时,discord.js无法识别.ts格式的文件,报错如下:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users.\Documents\Programação\Discord\Pessoal\Tom5\Tom5#v6\src\bot.ts
分片启动文件launcher.ts代码:
import chalk from "chalk"; import { ShardingManager } from "discord.js"; export class ShardsManager extends ShardingManager { constructor() { super( "src/bot.ts", { token: "", // 我在这里填写了机器人的token respawn: true, totalShards: "auto", } ) this.on("shardCreate", (shard) => { console.log( chalk.bold.green( `[SHARD - ${shard.id + 1}]` ), "已创建" ) }) this.spawn() } } new ShardsManager()
主文件bot.ts代码:
import chalk from "chalk"; import Tom5 from "./classes/Tom5"; import * as dotenv from "dotenv" dotenv.config() process.on('unhandledRejection', (reason, p) => { console.log( chalk.bold.red( "[SCRIPT REJEITADO]\n" ), reason ) }); process.on("uncaughtException", (err, origin) => { console.log( chalk.bold.red( "[ERRO CAPTURADO]\n" ), err ) }) process.on('uncaughtExceptionMonitor', (err, origin) => { console.log( chalk.bold.red( "[SCRIPT BLOQUEADO]\n" ), err ) }); await new Tom5().init()
尝试将bot.ts重命名为bot.js后,引发大量导入TypeScript文件的错误,无法正常运行。
解决方案
方法1:用ts-node处理TS分片文件
ShardingManager默认用Node.js直接执行文件,无法解析.ts后缀,需指定用ts-node运行每个分片。修改launcher.ts的配置:
super( "src/bot.ts", { token: "", // 填入你的机器人token respawn: true, totalShards: "auto", execArgv: ["-r", "ts-node/register"] // 添加该行,让Node通过ts-node处理TS文件 } )
先安装依赖:
npm install ts-node typescript --save-dev
运行分片管理器:
ts-node src/launcher.ts
方法2:编译TypeScript后运行
将所有TS文件编译为JS,再指向编译后的文件:
- 确保
tsconfig.json配置正确,设置输出目录(比如dist):
{ "compilerOptions": { "outDir": "./dist", "module": "CommonJS", "target": "ES2020", "strict": true, "esModuleInterop": true }, "include": ["src/**/*"] }
- 执行编译命令:
tsc
- 修改
launcher.ts中的文件路径为编译后的JS:
super( "dist/bot.js", // 指向编译后的主文件 { token: "", respawn: true, totalShards: "auto", } )
- 运行编译后的分片管理器:
node dist/launcher.js
方法3:用tsx替代ts-node(更快的运行方式)
若嫌ts-node启动慢,可改用tsx,配置方式类似:
super( "src/bot.ts", { token: "", respawn: true, totalShards: "auto", execArgv: ["-r", "tsx/esm"] } )
安装tsx:
npm install tsx --save-dev
运行:
tsx src/launcher.ts
内容的提问来源于stack exchange,提问作者TomG
相关产品推荐
相关产品推荐

