TurboRepo+AdonisJS跨应用共享类型时出现模块未找到错误
解决TurboRepo中AdonisJS无法解析共享类型包的问题
针对你的问题,核心原因是AdonisJS的模块解析机制与前端(React)不同,仅修改tsconfig.json不足以让AdonisJS识别TurboRepo中的共享包。以下是具体解决步骤:
1. 配置AdonisJS的路径别名(关键步骤)
AdonisJS v6使用esbuild作为默认构建工具,它不会自动读取tsconfig.json中的paths配置,需要在项目根目录的adonisrc.ts中手动添加别名:
import { defineConfig } from '@adonisjs/core/app' export default defineConfig({ appKey: env.get('APP_KEY'), http: { cookie: {}, trustProxy: false, }, // 添加别名配置 aliases: { '@': 'src', '@repo/type': '../type/src/index.ts' // 指向共享类型包的入口文件 } })
2. 调整TypeScript配置
修改AdonisJS项目的tsconfig.json,确保TypeScript能正确解析共享包:
{ "extends": "@adonisjs/tsconfig/tsconfig.app.json", "compilerOptions": { "rootDir": "./src", "outDir": "./build", "paths": { "@/*": ["./src/*"], "@repo/type": ["../type/src/index.ts"] // 同步添加paths映射 }, "moduleResolution": "NodeNext", // 适配TurboRepo的workspace模块解析 "module": "NodeNext", "target": "ES2022" }, "include": ["src/**/*", "../type/src/**/*"], // 确保共享类型被TypeScript检测到 "exclude": ["node_modules", "build"] }
3. 确认共享类型包的配置
检查packages/type/package.json,确保正确配置导出和类型声明:
{ "name": "@repo/type", "version": "0.0.0", "private": true, "exports": { ".": "./src/index.ts" }, "types": "./src/index.ts" // 明确指定类型入口 }
4. 清除缓存并重启服务
执行以下命令清除缓存,确保新配置生效:
rm -rf node_modules/.cache node ace serve --watch
完成以上步骤后,AdonisJS应该能正常导入@repo/type中的类型和常量了。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

