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

MERN项目本地正常但Render.com构建失败问题求助

解决方案:TypeScript编译时找不到.js模块的问题

问题根源

你遇到的错误并非Render提前查找.js文件,而是TypeScript编译器(tsc)在编译过程中,发现代码里导入了一个不存在的.js文件——你的源文件是chatControllers.ts,但chatRoutes.ts里写的是导入../controllers/chatControllers.js,此时该.js文件尚未编译生成,因此tsc抛出找不到模块的错误。

本地运行正常是因为你可能用ts-node或nodemon启动服务,这类工具会自动将.js后缀的导入映射到对应的.ts源文件,但tsc编译时会严格检查文件是否真实存在。

具体解决步骤

1. 修正导入语句的后缀

打开src/routes/chatRoutes.ts,将导入语句中的.js后缀移除,或替换为.ts:

方式一:移除后缀(推荐)

// 原代码
import { yourControllerFunctions } from '../controllers/chatControllers.js';

// 修改后
import { yourControllerFunctions } from '../controllers/chatControllers';

方式二:替换为.ts后缀

若需保留后缀,需在tsconfig中开启对应配置(见步骤2),再修改为:

import { yourControllerFunctions } from '../controllers/chatControllers.ts';

2. 调整tsconfig.json配置

针对你使用的NodeNext模块解析模式,补充以下配置项,确保TypeScript正确解析模块:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "target": "ES2022",
    "sourceMap": true,
    "outDir": "dist",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true, // 处理CommonJS与ES模块的互操作
    "allowImportingTsExtensions": true, // 允许导入.ts后缀的文件(使用方式二时需开启)
    "resolvePackageJsonExports": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"] // 排除已编译目录和依赖,避免重复编译
}

3. 确认Render的构建命令

你当前的构建命令pnpm i && pnpm build是正确的,只要package.json中build脚本对应tsc命令即可。无需调整Render的构建顺序,问题解决后tsc就能正常完成编译。

验证

修改完成后,本地先执行pnpm build测试是否能正常编译,确认无错误后再重新部署到Render。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:05:04