使用AWS CodePipeline部署Gatsby v2.20.12时遇调用栈溢出错误
解决Gatsby v2.20.12在AWS CodePipeline构建时npm install报错的问题
问题定位
你遇到的npm ERR! Maximum call stack size exceeded报错,和CodeBuild的硬件资源无关,核心是旧版Gatsby与当前CI环境的npm/Node.js版本不兼容——Gatsby v2.20.12是2020年的版本,对npm v7+的依赖解析逻辑不兼容,导致递归解析依赖时栈溢出。
具体解决步骤
1. 锁定CI环境的npm和Node.js版本
旧版Gatsby v2.x仅兼容npm v6.x和Node.js 10.x-12.x,在CodeBuild的buildspec.yml中强制指定版本:
version: 0.2 phases: install: commands: # 降级npm到v6 - npm install -g npm@6 # 切换到兼容的Node.js版本 - nvm install 12 - nvm use 12 build: commands: - npm install - npm run build
也可以在项目的package.json中添加engines字段,让npm自动校验版本:
"engines": { "node": "12.x", "npm": "6.x" }
2. 放弃全局安装Gatsby
全局安装Gatsby容易引发版本冲突,改为本地安装后通过npm脚本执行构建:
- 本地项目执行:
npm install gatsby@2.20.12 --save-dev - 在
package.json中添加构建脚本:
"scripts": { "build": "gatsby build" }
- 修改
buildspec.yml中的构建命令为npm run build,不再执行npm install -g gatsby
3. 清理CodeBuild缓存
旧的依赖缓存可能导致冲突,在CodeBuild项目的「构建项目设置」中暂时关闭「缓存」选项,重新运行流水线验证问题是否解决。
4. 关于CodePipeline版本的说明
当前报错和CodePipeline v1/v2无关,不需要升级流水线版本。如果后续需要更灵活的部署流程(比如并行阶段、自定义执行角色),再考虑升级到v2即可。
内容的提问来源于stack exchange,提问作者adam.shaleen
相关产品推荐
相关产品推荐

