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

TypeScript开发Discord机器人import模块报错如何解决

问题根因

两个报错都是配置不匹配导致的:

  • 最初的Cannot use import statement outside a module是因为Node默认采用CommonJS模块规范,不支持ES模块的import语法
  • 加了"type": "module"后Node切换为ES模块规范,但此时出现Unknown file extension ".ts"是两个原因共同导致:一是Node原生不识别.ts后缀文件,二是tsconfig.json中的module配置为commonjs,和ES模块环境冲突,编译输出的代码规范和运行环境不匹配。
解决方案步骤
  1. 调整tsconfig.json的模块相关配置,对齐ES模块规范
  2. 安装TypeScript、ts-node等必要的开发依赖
  3. 修改package.json的入口和启动脚本,适配编译流程和开发调试需求
  4. 后续导入本地自定义模块时,需要补全.js后缀(即使源文件是.ts格式,TypeScript会自动适配识别)
修改后的配置示例

tsconfig.json

{
  "compilerOptions": {
    "lib": ["ESNext"],
    "target": "ESNext",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "./dist",
    "strict": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "index.ts",
    "commands/*.ts"
  ],
  "exclude": ["node_modules"]
}

package.json

首先安装开发依赖:
npm install --save-dev typescript @types/node ts-node
修改后的配置:

{
  "name": "wdr",
  "version": "1.0.0",
  "description": "A discord bot",
  "main": "./dist/index.js",
  "type" : "module",
  "scripts": {
    "build": "tsc",
    "dev": "node --no-warnings --loader ts-node/esm index.ts",
    "start": "node dist/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "wdr",
  "license": "ISC",
  "dependencies": {
    "@discordjs/rest": "^0.1.0-canary.0",
    "discord-api-types": "^0.24.0",
    "discord.js": "^13.3.1",
    "dotenv": "^10.0.0"
  },
  "devDependencies": {
    "@types/node": "^18.11.0",
    "ts-node": "^10.9.1",
    "typescript": "^4.9.0"
  }
}

index.ts

原有代码无需改动,没有配置问题。

使用方式
  • 开发调试:执行npm run dev即可直接运行.ts源文件
  • 生产部署:先执行npm run build将TS代码编译为JS文件输出到dist目录,再执行npm run start启动程序。

内容的提问来源于stack exchange,提问作者Sylent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:00