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

无需package.json与tsconfig.json,如何编译运行TypeScript ES模块?

你的操作是正确的,这里有更简洁的优化方案

一、先确认:你的操作是正确的

你用.mts作为TypeScript ES模块的源文件扩展名、编译后导入.mjs文件的方式完全符合规范:

  • .mts是TypeScript官方定义的ES模块专用扩展名,tsc编译后会生成对应的.mjs文件;
  • Node.js对ES模块的导入路径要求严格,必须指定完整扩展名(.mjs),所以你写import {test} from './test.mjs'是符合Node.js ES模块规则的。

二、更优的简化方案(不用每次写长命令+更规范的项目结构)

通过tsconfig.json和package.json的配置,可以不用依赖.mts/.mjs扩展名,同时简化编译命令,步骤如下:

1. 初始化项目配置

创建package.json并添加ES模块标识:

{
  "type": "module"
}

创建tsconfig.json,配置TypeScript的模块规则和输出目录:

{
  "compilerOptions": {
    "module": "NodeNext",       // 遵循Node.js的模块系统规则
    "moduleResolution": "NodeNext", // 用Node.js的模块解析逻辑
    "target": "ES2020",         // 适配Node.js的ES版本
    "outDir": "./dist",         // 编译产物输出到dist目录
    "rootDir": "./src",         // 源码放在src目录
    "strict": true              // 开启严格类型检查(可选但推荐)
  }
}

2. 整理源码文件

在项目根目录创建src文件夹,里面放常规.ts扩展名的文件:

// src/test.ts
export function test(s: string) {
    console.log('test, s:' + s);
}
// src/main.ts
import { test } from './test.js'; // 注意这里写.js,TS会自动映射到src/test.ts

test('a');
console.log('done');

3. 编译运行

现在只需要两条简单命令(甚至可以把命令写到package.json的scripts里):

tsc && node dist/main.js

三、方案说明

  • package.json里的"type": "module"告诉Node.js:项目中所有.js文件默认都是ES模块,不用靠.mjs扩展名区分;
  • tsconfig.json的module: NodeNext让TypeScript完全对齐Node.js的模块规则,编译时会自动把src里的.ts文件转成dist里的.js,同时处理导入路径的扩展名映射;
  • 用src和dist分离源码和产物,项目结构更清晰,也方便后续扩展。

如果只是临时测试,你原来的方式完全没问题;但如果是长期项目,上面的配置方案更规范、更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:35