AEM as a Cloud Serviceのフロントエンドパイプラインエラーのトラブルシューティング
フルスタックパイプラインをAEM as a Cloud Serviceのフロントエンド(FE)のみのパイプラインに変換する場合、プラットフォーム固有の依存関係と厳密なリンティング要件が原因で、ビルドエラーが発生する場合があります。 Windows またはmacOSで package-lock.json を生成すると、Linux ベースのCloud Managerとの互換性が失われる可能性があります。 さらに、FE パイプラインでは、フルスタック Maven ビルドには存在しないコードスタイルのチェックが適用されます。
メモ
- Cloud Managerがフロントエンドパイプラインを実行する場合、最初に npm install を実行するのではなく、Git にある
package-lock.jsonを使用してnpm audit --production --audit-level=critical実行するだけです。 ただし、フルスタックパイプラインは、frontend-maven-plugin を通じてリクエストしたノード/NPM バージョンをインストールし、npm install を実行するので、フルスタックパイプラインには問題が表示されません。
説明 description
環境
- 製品:AEM as a Cloud Service - Sites
- パイプライン:Cloud Managerを介したフロントエンドのみ(FE)パイプライン
- ノードのバージョン:14.19.1
- npm バージョン:6.14.x
- ローカルビルド用のオペレーティングシステム:Windows (ローカル)、Linux (Cloud Manager コンテナ)
- 必要な権限:Cloud Managerのデプロイメントマネージャーの役割
問題/症状
- npm インストール中にパイプラインが失敗し、* fsevents not accessible from chokida r*などのエラーが発生する
package-lock.jsonファイルが見つからないか、一致しないことに関連するエラー- ローカルビルドは、Windows またはMacでは成功しますが、Cloud Manager パイプラインでは失敗します
- 数百の ESLint/コード形式エラーが FE のみのパイプライン障害の原因となる一方、フルスタックパイプラインはこれらのチェックをデフォルトでは実施しません
解決策 resolution
問題を解決するには、次の手順を試してください。
-
package-lock.jsonモジュールにui.frontendが存在し、リポジトリにコミットされていることを確認します。 -
Linux 環境を使用して
package-lock.jsonとnode_modulesを再生成します(Linux 用 Windows サブシステムまたは 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/コードスタイルのエラーに対処します。デプロイメントを成功させるには、すべてのリントエラーを解決する必要があります。
-
検証目的でのみ必要な場合は、
package.jsonのビルドスクリプトから linting を一時的に削除します。 ただし、実稼動での使用はお勧めしません。 -
依存関係やリンティングエラーを発生させずに、ビルドステップが正常に完了することを確認します。
-
デプロイメントに成功してもサイトのスタイルとスクリプトが読み込まれない場合は、Dispatcher設定と CDN 設定を確認します。 有効な vhost に、静的ドメインに適した
ServerAliasが含まれていることを確認します。 手順については、 フロントエンドパイプラインのデプロイメントが web サイトを中断 を参照してください。 -
パイプラインが
BUILD_NPM_AUDIT_ERRORで失敗した場合は、競合する SiteConfig ノードまたは HtmlPageItemsConfig ノードを削除します。 手順については、AEM as a Cloud Service フロントエンドパイプラインでの BUILD_NPM_AUDIT_ERROR の解決方法 を参照してください。
メモ
-
FE 専用パイプラインでは、フルスタック Maven ビルドよりも厳密なコードスタイルチェックが実施されます。すべてのリントエラーは、デプロイメント前に解決する必要があります。
-
package.jsonに次のスクリプトを追加することで、JavaScriptと CSS のリンティングエラーを修正するプロセスを自動化できます。code language-none "scripts": { "lint:fix": "npm run lint:js:fix && npm run lint:css:fix" }
これにより、npm run lint:fix を実行して、変更をプッシュする前に多くのリンティングの問題を自動的に修正できます。