Koa搭配TypeScript运行报Cannot use import outside of a module求助
问题原因梳理
- 直接用nodemon运行.ts文件时,没有指定ts-node加载服务端专用的tsconfig配置,默认读取根目录的
tsconfig.json,该配置中module字段为esnext,Node.js默认不识别ES模块的import语法,因此触发Cannot use import outside statement outside of a module报错。 - 自行添加
"type": "module"的操作和现有配置冲突,你的tsconfig.server.json明确配置输出commonjs模块,且ts-node对ESM模式的.ts文件需要额外特殊配置,因此添加后会出现无法识别.ts后缀的错误。 - 现有
start脚本没有关联ts-node执行器,nodemon不知道需要用ts-node转译.ts文件。
解决方案
- 先删除package.json中之前添加的
"type": "module"配置,恢复原有配置。 - 修改package.json的scripts字段,调整start脚本为指定ts-node加载服务端tsconfig配置:
"scripts": { "start": "NODE_PATH=src nodemon --exec ts-node --project tsconfig.server.json src/index.ts" }
其中--exec参数告诉nodemon使用ts-node执行.ts文件,--project参数指定加载tsconfig.server.json配置,该配置中module为commonjs,适配Node.js默认模块规范,可解决import语法报错问题。
3. 检查tsconfig.server.json的include字段,当前配置["*.ts"]仅匹配根目录的.ts文件,如果你的入口、业务代码都存放在src目录下,需要将include调整为["src/**/*.ts"],避免ts-node无法识别src下的ts文件。
4. 建议调整app.ts的导出写法,统一使用ES模块导出规范,将exports.start =修改为export const start =,避免混合写法出现导出异常。
内容的提问来源于stack exchange,提问作者Kayceecodes
相关产品推荐
相关产品推荐

