Nuxt应用手动CLI部署Elastic Beanstalk正常,经CodePipeline部署启动失败
问题根因
该错误并非package.json文件缺失,而是Nuxt启动时的工作目录不符合预期,或CodeBuild打包产物的目录结构和Elastic Beanstalk Node.js运行环境的默认规则不匹配。
排查&解决步骤
- 修正buildspec.yml的artifacts配置
你当前的artifacts配置会将CodeBuild构建环境中整个工作目录的文件打包,若你的Nuxt构建产物默认存放在.output目录下,需要明确指定打包根目录,避免多余层级,同时固定依赖版本、对齐Node.js runtime版本:version: 0.2 phases: install: runtime-versions: nodejs: 16 # 请和本地开发、EB环境的Node.js大版本保持完全一致 build: commands: - yarn install --frozen-lockfile # 固定依赖版本,避免构建时拉取到和本地有差异的版本 - yarn build artifacts: base-directory: '.' # 明确指定从当前构建根目录开始打包 files: - '**/*' discard-paths: no # 保留原文件路径结构 - 手动指定Elastic Beanstalk的启动工作目录
在项目根目录新增Procfile文件(提交到GitHub仓库),明确指定启动命令的执行目录,避免EB默认规则的差异:
如果是Nuxt 3版本,也可以直接指定启动入口避免路径解析问题:web: cd /var/app/current && yarn startweb: node /var/app/current/.output/server/index.mjs - 验证版本一致性
确认CodeBuild使用的Node.js runtime版本、Elastic Beanstalk环境的Node.js版本、本地开发的Node.js版本三者完全一致,大版本差异会导致模块加载路径逻辑变化,触发该错误。 - 排查隐藏文件缺失问题
之前对比zip包时可能忽略了.开头的隐藏文件(比如.npmrc、.yarnrc、.env等),可在buildspec的build阶段加一行ls -la打印构建目录文件,在CodeBuild日志中确认package.json存在于构建根目录,且所有必要隐藏文件都被打包到产物中。
内容的提问来源于stack exchange,提问作者zcserei
相关产品推荐
相关产品推荐

