ts-node转译TypeORM的createConnection为(0, typeorm_1.createConnection)报错如何解决
解决方案
步骤1:调整全局setup文件的模块语法
Jest的globalSetup默认以CommonJS规范加载文件,你当前混用了CommonJS的require和ES模块的顶层import,会导致ts-node/register还未完成注册,TS代码就已经被解析,触发转译错误。修改全局setup文件代码如下:
// 必须放在文件第一行,优先完成ts-node注册 require('ts-node/register'); // 所有依赖改用require导入,不要使用顶层import语法 const { Connection } = require('typeorm'); const { closeTestingConnection, createTestingConnection, dropTestingDatabases, runMigrationsOnDatabase } = require('./utils/util'); /** * 所有测试用例执行前创建数据库连接 */ const globalSetup = async () => { let testConnection: Connection | undefined; try { testConnection = await createTestingConnection(); await runMigrationsOnDatabase(testConnection); } catch (error) { if(testConnection) { await dropTestingDatabases(testConnection); await closeTestingConnection(testConnection); } throw error; } } // 改用CommonJS导出规则,不要使用export default module.exports = globalSetup;
步骤2:修正tsconfig配置适配转译规则
你看到的(0, typeorm_1.createConnection)是TypeScript的正常转译结果,不属于错误,报错本质是ts-node的配置和项目不匹配。在项目根目录的tsconfig.json中确认以下配置项:
{ "compilerOptions": { "esModuleInterop": true, "module": "CommonJS", "target": "ES2016", "moduleResolution": "Node", "allowSyntheticDefaultImports": true }, "ts-node": { "transpileOnly": true // 可选配置,跳过类型检查提升执行速度 } }
步骤3:修复数据库配置加载逻辑
你当前getDBConfig函数直接加载.ts后缀的ORM配置文件,需要确保ts-node注册完成后才调用该函数。同时可以在require配置文件前打印文件的绝对路径,核对路径是否正确,避免找不到配置文件的错误。如果路径校验正常但仍无法加载,可以将ORM配置改为.js或.json格式,规避TS文件加载问题。
内容的提问来源于stack exchange,提问作者Deepak Bansal
相关产品推荐
相关产品推荐

