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

使用ts-node-esm运行TS Discord机器人时遇模块导入找不到问题

ESM模式下TS路径别名&导入报错的解决办法

先搞定相对路径的问题

连相对路径都报错的话,先排查这几个点:

  • 核对文件位置:Ping.ts在src/Commands/Miscellaneous/,往上两级是src/,../../Utils/Util这个路径对应的文件必须真的在src/Utils/Util.ts,别搞错层级,还要注意Mac/Linux系统文件名区分大小写,别写错字母
  • ESM模式必须加扩展名:不管是TS还是JS文件,导入时都得写.js后缀,比如改成../../Utils/Util.js——别纠结为什么是js,ts-node-esm会自动处理TS到JS的映射

修复路径别名的问题

TSConfig里的paths别名,ESM模式下ts-node-esm不会自动识别,得额外配置:

  1. 装依赖:
    npm install tsconfig-paths --save-dev
    
  2. 修改启动命令,用node加载器结合路径注册:
    node --loader ts-node/esm --require tsconfig-paths/register src/Main.ts
    
    嫌麻烦就把这个命令写到package.json的scripts里:
    "scripts": {
      "start": "node --loader ts-node/esm --require tsconfig-paths/register src/Main.ts"
    }
    
  3. 确认tsconfig.json的配置没毛病:
    必须有baseUrl配合paths,而且module和moduleResolution要和ESM匹配:
    {
      "compilerOptions": {
        "baseUrl": "./src",
        "paths": {
          "@/Utils/*": ["Utils/*"]
        },
        "module": "ESNext",
        "moduleResolution": "NodeNext",
        "esModuleInterop": true
      }
    }
    

最后提几个注意点

  • package.json里的type必须是module,别改回去
  • 所有导入语句都要加文件扩展名,别偷懒省略
  • 要是还不行,删了node_modules重新装一遍,再检查别名拼写有没有错(比如@后面是不是多了或少了斜杠)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:28