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

Node 22 + TS 5.4构建后启动报错:无法找到模块

解决思路

1. 核心原因:ES模块要求完整文件扩展名

Node 22的ES模块(type: module)对相对路径导入有严格要求,必须指定完整的文件扩展名(如.js),不能像CommonJS那样省略。你的报错本质是编译后的JS文件里的导入语句没有带.js后缀,导致Node无法解析。

2. 针对性解决步骤

步骤1:检查编译后的文件与导入语句

  • 确认app/core/ApiServer.js文件是否存在(构建后TS会编译为JS,后缀为.js)
  • 打开app/commands/server.js,查看导入语句是否为:
    import { ApiWorker } from '../core/ApiServer'; // 错误:缺少.js后缀
    
    如果是这种情况,必须修改为带扩展名的路径:
    import { ApiWorker } from '../core/ApiServer.js';
    

步骤2:配置TypeScript自动生成带扩展名的导入

修改tsconfig.json,调整模块解析规则,让TS编译时自动为导入路径添加.js后缀:

{
  "target": "es2022",
  "esModuleInterop": true,
  "module": "ESNext",
  "moduleResolution": "NodeNext", // 替换原Node为NodeNext/Node16,适配ES模块扩展名规则
  "outDir": "app",
  "resolveJsonModule": true,
  "forceConsistentCasingInFileNames": true,
  "allowImportingTsExtensions": false,
  "noEmit": false
}
  • moduleResolution: NodeNext会让TS按照Node ES模块的规则解析路径,编译时自动将.ts导入转换为.js
  • allowImportingTsExtensions: false避免TS文件里出现带.ts的导入(编译后会导致Node解析错误)

步骤3:修正TS源文件中的导入路径(可选)

如果TS编译后仍未自动添加扩展名,可以直接在TS源文件中写带.js的导入:

// commands/server.ts
import { ApiWorker } from '../core/ApiServer.js';

TS会自动识别这是编译后的JS文件路径,不会报错(需确保tsconfig中moduleResolution为NodeNext/Node16)

步骤4:验证Node运行环境的路径解析

  • 运行node --experimental-specifier-resolution=node app/commands/server.js测试(临时启用宽松解析,仅用于排查)
  • 如果临时命令能运行,说明确实是扩展名问题,回到步骤2完善TS配置

步骤5:排除其他可能问题

  • 检查文件名大小写:Node在大小写敏感的系统(如Linux/macOS)中会区分文件名,确保ApiServer.ts编译后是ApiServer.js,导入路径大小写一致
  • 确认outDir配置正确:构建后所有JS文件确实生成在app目录下,没有嵌套错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:00:02