ng build --prod エラーの解決方法:Angular 14以降で非推奨になった引数の代替手段
問題の概要
Angularプロジェクトで本番環境用のビルドを実行しようとすると、以下のエラーが発生します:
ng build --prod --aot
Error: Unknown argument: prod
このエラーは、ng serve
やパラメータなしの ng build
は正常に動作するにもかかわらず発生します。
根本原因
この問題の根本的な原因は、Angular CLIのバージョン14以降で --prod
フラグが完全に廃止されたことにあります。
廃止の背景
Angularチームはバージョン12で --prod
フラグを非推奨とし、バージョン14で完全に削除しました。 この変更は、より明確で一貫性のある設定システムを提供するために行われました。
解決方法
標準的な解決策
現在の推奨される方法は、--configuration production
フラグを使用することです:
ng build --configuration production --aot
より簡潔なバージョンとして -c
エイリアスも利用できます:
ng build -c production --aot
Angular 15以降の注意点
Angular 15以降では、ng build
コマンド自体がデフォルトでプロダクション設定を使用するようになりました。 ただし、明示的に指定することでコードの意図が明確になります。
package.json での設定
よくビルドコマンドを使用する場合は、package.json
の scripts セクションに追加すると便利です:
{
"scripts": {
"build-prod": "ng build --configuration production --aot",
"build-dev": "ng build --configuration development"
}
}
これにより、npm run build-prod
で簡単に実行できます。
Azure DevOps パイプラインでの対応
.NET プロジェクト内の Angular ソリューションをデプロイする場合、.csproj
ファイルを更新する必要があります:
更新前(古い形式):
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod"
Condition=" '$(BuildServerSideRenderer)' == 'true' " />
更新後(新しい形式):
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --configuration production" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --configuration production"
Condition=" '$(BuildServerSideRenderer)' == 'true' " />
設定の詳細
Angularのビルド設定は angular.json
ファイルで管理されています。 設定例:
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
}
],
"outputHashing": "all",
"sourceMap": false,
"optimization": true
},
"development": {
"buildOptimizer": false,
"optimization": false,
"sourceMap": true
}
}
まとめ
--prod
フラグは Angular 14 で完全に削除されたため、以下のいずれかの方法で対応してください:
ng build --configuration production
(推奨)ng build -c production
(短縮版)package.json
にスクリプトとして定義
この変更は、Angular CLIの設定システムをより明確で柔軟なものにするための改善の一環です。
互換性の問題
古いプロジェクトを最新のAngularバージョンにアップデートする場合は、すべてのビルドスクリプトとCI/CDパイプラインを確認して更新してください。