Github Actions构建CDK栈时AppSync resolver fromAsset找不到文件
可能的原因及对应解决方案:
构建脚本未复制Resolver代码到输出目录
若用TypeScript编译项目,默认仅会将.ts文件编译到lib目录,Resolver的.js文件不会自动复制。本地开发时lib目录可能保留了手动复制的文件,但CI环境重新构建后会缺失。
解决:修改package.json的构建脚本,添加静态文件复制步骤。例如:"scripts": { "build": "tsc && cp -r src/graphql/*.js lib/graphql/" }或使用
copyfiles工具(需先安装npm install copyfiles --save-dev):"scripts": { "build": "tsc && copyfiles -u 1 src/graphql/*.js lib/" }路径大小写不匹配
GitHub Actions基于Linux环境,文件名大小写敏感。若本地是Windows/macOS(默认大小写不敏感),代码中路径的大小写与实际文件名不一致时,本地能正常找到文件,但CI环境会失败。
解决:确保代码中fromAsset的路径与实际文件名大小写完全一致,比如putProduct.js和代码中的路径完全匹配。相对路径基准错误
CDK的fromAsset以执行cdk命令时的工作目录作为相对基准,而非代码文件所在目录。若CDK入口文件在bin/目录,在项目根目录执行命令时,相对路径可能出现偏差。
解决:使用Node.js的path模块生成基于代码文件的绝对路径,避免基准错误:const path = require('path'); // 在Resolver定义中替换路径 code: appsync.Code.fromAsset(path.join(__dirname, 'graphql/putProduct.js')),这里
__dirname代表当前代码文件所在的目录,确保路径解析准确。CI环境文件缺失验证
可在GitHub Actions步骤中添加调试命令,确认文件是否存在于预期路径:
解决:在CDK部署前添加检查步骤:- name: Verify resolver file exists run: ls -la lib/graphql/若文件不存在,回到第一个方案检查构建脚本的复制逻辑;若存在,再排查路径解析或权限问题。
内容的提问来源于stack exchange,提问作者George Bentz

