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

导入models目录下TypeScript文件报错:找不到指定模块

导入TypeORM实体模块失败的排查与解决

我在./models目录下的多个.ts文件中定义了TypeORM实体,在应用中导入使用时出现模块找不到的错误。

导入代码示例

import { DataSource } from "typeorm";
import { User } from "../models/User";
import { Company } from "../models/Company";
import { CompanyUser } from "../models/CompanyUser";

const initDB = () => {
  const AppDataSource = new DataSource({
    type: "postgres",
    host: process.env.BACKEND_URL,
    port: process.env.DB_PORT as unknown as number,
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    entities: [User, Company, CompanyUser],
    synchronize: true,
    logging: true,
  });

  AppDataSource.initialize()
    .then(() => {
      console.log("Connected to the DB");
    })
    .catch((error) => {
      console.log("Failed to connect to the DB: ", error);
    });
};

export { initDB };

编译错误信息

CustomError: Cannot find module 'C:\Users\Yu\Desktop\Projects\keytest\keytest-backend\models\User' imported from C:\Users\Yu\Desktop\Projects\keytest\keytest-backend\utils\database.ts

当前tsconfig.json配置

{
  "compilerOptions": {
    "target": "ES6",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
    "module": "ES6",                                  /* Specify what module code is generated. */
    "outDir": "./dist",                               /* Specify an output folder for all emitted files. */
    "moduleResolution": "node",
    "esModuleInterop": true,                          /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
    "forceConsistentCasingInFileNames": true,         /* Ensure that casing is correct in imports. */
    "strict": true,                                   /* Enable all strict type-checking options. */
    "skipLibCheck": true,                             /* Skip type checking all .d.ts files. */
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false,
  },
  "ts-node": {
    "esm": true
  }
}

解决方案

  • 检查路径与大小写一致性
    Windows文件系统默认不区分大小写,但forceConsistentCasingInFileNames设为true会强制校验导入路径与实际文件的大小写是否完全匹配。确认models目录下的文件名(比如是User.ts还是user.ts)和导入语句中的拼写完全一致,同时检查路径层级是否正确。

  • 添加ES模块导入后缀
    由于配置了"module": "ES6"和ts-node的esm: true,ES模块导入需要明确文件后缀。修改导入语句,添加.ts后缀:

    import { User } from "../models/User.ts";
    import { Company } from "../models/Company.ts";
    import { CompanyUser } from "../models/CompanyUser.ts";
    
  • 配置baseUrl与paths简化导入
    在tsconfig.json的compilerOptions中添加以下配置,避免相对路径出错:

    "baseUrl": "./",
    "paths": {
      "@models/*": ["models/*"]
    }
    

    之后导入语句可改为:

    import { User } from "@models/User";
    

    若使用ts-node,需额外安装tsconfig-paths,并在启动脚本中配置加载路径映射。

  • 确认文件存在与输出目录
    检查报错路径中的User.ts文件是否真实存在,未被误删或移动。同时,由于配置了outDir: "./dist",编译后的文件会输出到dist目录,运行时需确保指向编译后的文件而非源码文件。

  • 调整ES模块兼容配置
    在package.json中添加"type": "module",同时将tsconfig.json中的module改为ESNext或NodeNext,提升ES模块的兼容性。

内容的提问来源于stack exchange,提问作者U. Watt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:34