You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,再指向编译后的文件:

  1. 确保tsconfig.json配置正确,设置输出目录(比如dist):
{
  "compilerOptions": {
    "outDir": "./dist",
    "module": "CommonJS",
    "target": "ES2020",
    "strict": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}
  1. 执行编译命令:
tsc
  1. 修改launcher.ts中的文件路径为编译后的JS:
super(
    "dist/bot.js", // 指向编译后的主文件
    {
        token: "",
        respawn: true,
        totalShards: "auto",
    }
)
  1. 运行编译后的分片管理器:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:32:09