AWS Amplify 前端构建在主分支上失败但在功能分支上成功构建

AWS Amplify Frontend Build Failed on master branch but successfully builds on a feature branch

我最近在我正在开发的 react-app 上添加了 google 标签管理器,并将其推送到名为 gtm 的分支中。

AWS Amplify 成功构建了应用程序,它已经启动 运行。然后我将这些更改合并到 master 分支中,没有合并冲突。但是,在 master 分支中(它托管在自定义域中)由于此错误,应用程序无法构建:

Error: [BABEL] /codebuild/output/src957941865/src/webapp/src/index.js: Cannot find module '@babel/helper-regex'

下面是 AWS Amplify 中显示的构建错误

(1) 首先要做的显然是执行此操作:

yarn add @babel/helper-regex

但是,使用新更改进行部署只会创建另一个

Error: [BABEL] /codebuild/output/src957941865/src/webapp/src/index.js:

但是使用了不同的 babel 模块,所以这会创建一个很长的添加包链,不一定能解决根本问题。

(2) 我做的第二个修复是还原到已成功部署的应用程序版本。我最初怀疑 google 标签管理器是导致问题的原因。然而,事实并非如此。显示相同的错误。

(3) 我做的第三件事是我提到了这个问题中建议的修复 (https://github.com/facebook/create-react-app/issues/8062)。总结线程,它说我需要做的就是执行以下操作。

  1. 删除node_modules
  2. 删除yarn.lock
  3. 执行yarn install

不幸的是,这并没有解决问题,构建错误仍然存​​在。

(4) 我做的第四个修复是我检查了两个分支 mastergtm 使用 git diff master..gtm 结果如下。


看到有差异,出于绝望,我下载了 **gtm** 分支,然后将其内容复制粘贴到 windows 资源管理器中的 master 分支,然后提交更改。
不幸的是,这仍然没有解决问题。

我唯一没有尝试过的是在 AWS amplify 中重新连接 master 分支,但我不想冒网站无法运行的风险,因为有活跃的用户,如果我经历过它,它仍然没有解决这个问题,它会造成更多的不便。我希望有人已经经历过这个并且可以指出正确的方向。

我建议您也尝试结合修复 (2) 和 (3)。也就是说,恢复到版本 w/out google 标签管理器 ,然后是 纱线清理安装(即删除 node_modules & yarn.lock -> 纱线安装)。这样做的原因是,即使您恢复到已知良好的版本,您的本地工作区可能仍然有来自 gtm 分支的损坏的 yarn 依赖关系。

我最近在使用 storybook 和 create-react-app 解决 babel-loader 的依赖问题时遇到了类似的问题。

在我注意到其他预览版本工作正常,同时具有与主分支相同的代码后,我怀疑 node_modules 缓存是罪魁祸首。

我不知道是否有更简单的方法来清理 amplify 内部使用的 node_modules 缓存(搜索了一下,没有找到),所以我只是在 preBuild 阶段添加了一个额外的命令(rm -rf node_modules)

例如

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - rm -rf node_modules
        - yarn install

一旦构建通过并重新生成缓存(这是构建过程的最后一步),您只需删除添加的命令,一切都会按预期在未来的构建中运行。