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

如何让Node中的TypeScript导入ES6模块无需.js扩展名?

Node + TypeScript ESM 实现无扩展名导入配置方案

已搭建可正常运行的Node + TypeScript API,但使用ES6模块导入时,即便源文件为.ts格式,仍必须添加.js扩展名。若使用.ts扩展名或省略扩展名,会报错:CustomError: Cannot find module 'C:\.....\src\models'

配置修改步骤

  • 步骤1:更新package.json,声明ES模块类型
    在package.json根节点添加"type": "module",告诉Node.js当前项目遵循ES模块规范:

    {
      "type": "module",
      "scripts": {
        "dev": "nodemon"
      }
    }
    
  • 步骤2:调整tsconfig.json的模块解析策略
    修改compilerOptions中的moduleResolution为"bundler",该策略支持无扩展名导入逻辑,同时补充必要配置:

    {
      "compilerOptions": {
        "target": "ES6",
        "module": "ESNext",
        "moduleResolution": "bundler", // 核心配置:允许省略导入扩展名
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "outDir": "./build",
        "strict": true,
        "skipLibCheck": true
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules"]
    }
    
  • 步骤3:修正nodemon.json的监听范围
    将watch字段指定为源码目录["src"],避免无效文件触发服务重启:

    {
      "watch": ["src"],
      "ext": "ts",
      "exec": "ts-node-esm src/server.ts"
    }
    
  • 步骤4:修改导入语句,移除.js扩展名
    现在可直接使用无扩展名的导入方式:
    server.ts:

    import express from 'express';
    import dotenv from 'dotenv';
    import { user } from './models';
    
    dotenv.config();
    
    const app = express();
    const PORT = process.env.PORT || 3049;
    
    app.get('/', (req: express.Request, res: express.Response) => {
        res.send(user);
    });
    
    app.listen(PORT, () => {
        console.log(`listening on port http://localhost:${PORT}`);
    });
    

    models.ts:

    import { IUser } from './interfaces';
    
    export const user: IUser = {
        firstName: "Hendrick",
        lastName: "Denzmann",
        accessGroups: ['loggedInUsers', 'members']
    };
    

原理说明

Node.js原生ES模块要求导入必须指定完整扩展名,而moduleResolution: "bundler"是TypeScript为ES模块运行时设计的解析策略,允许省略扩展名,ts-node-esm会自动识别并解析.ts文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:24:55