Amplify自定义CDK栈构建报错:找不到metro-config类型定义文件
解决Amplify自定义CDK栈构建时
TS2688: Cannot find type definition file for 'metro-config'错误 问题原因
Yarn工作区的依赖共享机制会让TypeScript编译器扫描整个工作区内的所有源码和依赖目录,哪怕你的CDK代码没直接引用metro-config,也会因为mobile包(React Native)里的依赖触发类型查找,而Amplify生成的默认tsconfig未限制扫描范围,导致报错。
解决方案
1. 调整CDK目录的tsconfig排除跨包干扰
在自定义CDK栈的tsconfig.json中,添加exclude配置排除mobile包路径,或指定typeRoots仅扫描当前包的类型定义:
{ "compilerOptions": { // 保留Amplify生成的原有配置 "typeRoots": ["./node_modules/@types"] // 仅使用当前包的@types }, "exclude": [ "../path-to-mobile-package", // 替换为你的mobile包实际相对路径 "node_modules", "cdk.out" ] }
2. 在CDK目录本地安装类型依赖
即使代码未引用,也可以在CDK栈目录单独安装@types/metro-config,确保TypeScript能找到对应的类型文件:
cd amplify/backend/custom/your-cdk-stack-name yarn add -D @types/metro-config
3. 限制工作区依赖的全局扫描
在mobile包的package.json中标记该包为私有,并明确依赖范围,避免依赖被工作区全局提升:
{ "private": true, "dependencies": { "metro-config": "^0.76.0" // 替换为你实际使用的版本 }, "devDependencies": { "@types/metro-config": "^0.76.0" } }
之后重新强制安装依赖:
yarn install --force
4. 修改Amplify构建上下文
在项目根目录的amplify.yml中,指定构建仅在web包目录执行,避免扫描mobile包的依赖:
version: 1 frontend: phases: preBuild: commands: - cd web # 进入你的Next.js web包目录 - yarn install build: commands: - yarn run build artifacts: baseDirectory: web/.next files: - '**/*' cache: paths: - web/node_modules/**/*
内容的提问来源于stack exchange,提问作者user10504
相关产品推荐
相关产品推荐

