AEM as a Cloud Service中的前端管道故障疑难解答
在AEM as a Cloud Service中将全栈管道转换为仅前端(FE)管道时,由于平台特定的依赖项和严格的筛选要求,可能会发生构建失败。 在Windows或macOS上生成package-lock.json可能会导致与基于Linux的Cloud Manager不兼容。 此外,FE管道强制实施全栈Maven构建中不存在的代码样式检查。
注释
- 当Cloud Manager运行前端管道时,它不会首先执行npm安装,它只需要Git中的
package-lock.json并运行npm audit --production --audit-level=critical。 但是,全栈管道安装我们通过frontend-maven-plugin请求的节点/NPM版本,它运行npm install,因此我们在全栈管道中未看到问题。
描述 description
环境
- 产品: AEM as a Cloud Service — 站点
- 管道:仅前端(FE)管道(通过Cloud Manager)
- 节点版本: 14.19.1
- npm版本:6.14.x
- 用于本地生成的操作系统:Windows(本地)、Linux(Cloud Manager容器)
- 所需权限: Cloud Manager中的部署管理器角色
问题/症状
- 在npm安装期间,管道失败,并出现错误,例如* 无法从chokida r*访问fsevents
- 与缺少或不匹配的
package-lock.json文件相关的错误 - 本地构建在Windows或Mac上成功,但在Cloud Manager管道中失败
- 数百个ESLint/代码样式错误会导致仅FE管道失败,而全栈管道默认不会强制执行这些检查
解决方法 resolution
请尝试以下步骤来解决问题:
-
确保
package-lock.json存在于ui.frontend模块中并已提交到您的存储库。 -
使用Linux环境重新生成
package-lock.json和node_modules(使用Windows Subsystem for Linux或Docker)。 要重现并解决仅使用FE的管道的平台特定依赖性问题,请在WSL终端中使用以下命令:code language-none cd /path/to/your/project rm -rf package-lock.json node_modules npm install git add package-lock.json git commit -m "Regenerate package-lock.json on Linux"
或者在Linux容器中运行:code language-none docker run --rm -v $(pwd):/app -w /app node:16-alpine \ sh -c "rm -rf node_modules package-lock.json && npm install" -
更新过时的依赖项,包括Jest、Storybook和Webpack。
-
使用具有生产和关键审核级别标志的
npm audit来标识剩余的依赖性问题。 例如:npm audit --production --audit-level=critical -
将重新生成的
package-lock.json文件从Linux环境提交到存储库。 -
将更改推送到仅FE管道使用的分支。
-
在Cloud Manager中重新运行仅限FE的管道。
-
解决构建过程中报告的任何ESLint/代码样式错误;必须解决所有lint错误才能成功部署。
-
如果仅出于验证目的而需要,请在
package.json中临时删除生成脚本中的Linting。 但是,不建议将此用于生产。 -
验证构建步骤是否成功完成,并且没有依赖关系或Linting错误。
-
如果部署成功,但您的站点的样式和脚本未加载,请检查Dispatcher设置和CDN配置。 请确保已启用的vhost包含静态域的正确
ServerAlias。 有关步骤,请参阅前端管道部署中断网站。 -
如果管道因
BUILD_NPM_AUDIT_ERROR而失败,请删除任何冲突的SiteConfig或HtmlPageItemsConfig节点。 有关步骤,请参阅如何解决AEM as a Cloud Service前端管道中的BUILD_NPM_AUDIT_ERROR。
注释
-
与全栈Maven构建相比,仅FE管道强制进行更严格的代码样式检查;所有lint错误必须在部署之前解决。
-
您可以通过向
package.json添加以下脚本来自动完成修复JavaScript和CSS Linting错误的过程:code language-none "scripts": { "lint:fix": "npm run lint:js:fix && npm run lint:css:fix" }
这允许您在推送更改之前运行npm run lint:fix以自动更正许多Linting问题。