現在、Dockerコンテナーを作成して、本番環境をビルドしようとしていますAngular app。npmを使用しています。依存関係のみをインストールしたいので(devDependenciesはありません)、これを実行します。
npm install --only=prod ng build project-name --prod
唯一の問題は、ビルドに@ angular/cliや@ angular-devkit/build-angularなどの多くのパッケージがないことです。インターネットで適切なソリューションを見つけることができませんでしたが、自分のビルドにすべてのdevDependenciesを含めたくありません。また、本番ビルドには、ビルドに必要なパッケージを含めたくありません。これに対する良い解決策はありますか?
依存関係について心配する必要はありません。
@ angular/cliを使用して本番ビルドをトリガーすると
ng build --prod
Angularはバンドルから未使用のパッケージとコードをツリーシェイクします!設定できるすべてのビルドオプションについては、 https://github.com/angular/angular-cli/wiki/build を参照してください。
考慮しなければならない唯一のことは、パッケージの使用方法と、依存関係が treeshaking をサポートしているかどうかです。 次のようなインポートは避けます:
import * as xy from 'packageXY';
もう1つのヒントは、npmパッケージ Webpack-Bundle-Analyzer バンドルを検査/分析するために次のコマンドを実行します。
npm i webpack-bundle-analyzer
ng build --prod --stats-json
cd dist
webpack-bundle-analyzer stats.json
開発フェーズで使用するすべてのnpmパッケージは、本番ビルドには含まれません。パッケージをインストールするときに特別なコマンドは必要ありません。必要なすべてのパッケージをインストールするか、通常どおり既存のプロジェクトに対してnpm install
を実行します。
Angular app をng build prod
とともにデプロイすると、アプリの重要なパッケージとangular.jsonファイルに含まれる依存関係のみが含まれますbuildセクション。
自分で試してください:angularプロジェクトを実行してnpm install
を実行するか、npmパッケージを追加してからng build prod
を実行し、プロジェクトフォルダー内のdistフォルダーに移動して、特にnode_modulesフォルダー内では、プロジェクトと比較して内容が少ないことを確認してください。