TypeScript编译后运行报错Cannot use import statement outside a module
问题根因
你运行编译后的JS代码时,程序加载了未编译的TypeScript源码文件,Node.js原生不支持直接执行TS文件,也不允许在CommonJS模块中直接使用ES模块的import语法。
解决方案
- 修正TypeORM实体路径配置
报错路径指向源码目录下的.ts文件,说明你的TypeORM配置(通常是ormconfig.json、ormconfig.ts或代码内的初始化配置)中entities字段配置的是源码路径:
改为适配生产环境的编译后文件路径,也可以写兼容开发/生产的通配格式:// 错误配置示例 "entities": ["source/entities/**/*.ts"]// 方案1:生产环境专用,直接指向编译后的JS文件 "entities": ["dist/entities/**/*.js"] // 方案2:兼容开发/生产环境,两种后缀都适配 "entities": ["**/entities/**/*.{ts,js}"] - 补全tsconfig编译配置
你当前的tsconfig.json中outDir参数处于注释状态,虽然编译时临时指定了输出目录,建议直接打开配置避免出错,同时可以配置rootDir保证编译目录结构对齐:
可以在package.json中新增编译脚本,每次编译前自动清理旧的dist文件,避免残留文件干扰:{ "compilerOptions": { // 其他原有配置保持不变 "outDir": "./dist", "rootDir": "./source" } }{ "scripts": { // 其他原有脚本保持不变 "build": "rm -rf dist && tsc" } } - 移除不必要的运行参数
你的tsconfig配置module为commonjs,编译产物是标准的CommonJS模块,不需要添加--experimental-modules参数,保持原start脚本即可:"start": "node ./dist/server.js"
验证操作
所有配置修改完成后,执行yarn build重新编译,再执行npm run start即可正常启动。
内容的提问来源于stack exchange,提问作者maicon santos
相关产品推荐
相关产品推荐

