Angular CLI/webpackを使用してAngular 2アプリを構築する場合、いくつかのSass変数の値を指定したいと思います。いくつかのurl(#{$my-base-path}/...)
または$fa-font-path
が本番環境のCDNを指すようにするか、受け入れビルドと本番ビルド用に異なる背景色を設定するだけです。
AngularCLIがenvironments/environment.prod.ts
などから構成を選択する方法が好きです。しかし、ng build
に追加のコマンドラインパラメーターも喜んで使用しますが、これまでのところ運がありません。
Angular CLIがなければ、 コマンドラインでSassカスタム関数を使用する ができると思いますが、Angularと一緒にそのアプローチを使用する方法がわかりません。 _CLI。
たぶん、すべてのSassコンパイルに使用する特定のmy-variables.sccs
へのパスを指定できますか?
Webpackのsass-loader 次のように述べています ですが、Angular CLIで使用できるかどうかはわかりません:
環境変数
実際のエントリファイルの前にSassコードを追加する場合は、
data
オプションを設定するだけです。この場合、sass-loaderはdata
オプションをオーバーライドせず、エントリのコンテンツを追加するだけです。これは、Sass変数の一部が環境に依存している場合に特に役立ちます。{ loader: "sass-loader", options: { data: "$env: " + process.env.NODE_ENV + ";" } }
何か案が?
Arjanのコメントに加えて、.scss
に異なる.angular-cli.json
ファイルを使用して複数のアプリを作成することで問題を解決しました。
ステップ1:環境ごとに.scss
ファイルを使用して複数のフォルダーを作成します。すべての.scss
ファイルのファイル名は同じです。
|- src
...
|- environments
|- environment-scss
|- globalVars.scss
|- environment-prod-scss
|- globalVars.scss
...
src/environment-scss/globalVars.scss内:
$my-base-path: 'YOUR/DEV/PATH'
src/environment-prod-scss/globalVars.scss:
$my-base-path: 'YOUR/PROD/PATH'
ステップ2:.angular-cli.json
(Angular-cli Wiki Here) に複数のアプリを追加し、stylePreprocessorOptions
各環境の各アプリオブジェクトのエントリ (Angular-cli Wiki Here) 。
"apps": [
{
"root": "src",
...
"name": "dev",
"stylePreprocessorOptions": {
"includePaths": [
"environments/environment-scss"
]
}
...
},
{
"root": "src",
...
"name": "prod",
"stylePreprocessorOptions": {
"includePaths": [
"environments/environment-prod-scss"
]
}
...
}
],
ステップ3:環境固有の変数が必要な場所にglobalVars.scss
をインポートします。 相対パスを使用しないでください
@import "globalVars";
ng build --app=dev
を使用する場合、$my-base-path
は'YOUR/DEV/PATH'
になり、ng build --app=prod
を使用する場合、$my-base-path
は'YOUR/PROD/PATH'
になります。
Angular CLI 6の時点で、environment.ts
は本番ビルドで自動的にenvironment.prod.ts
に置き換えられなくなりました。代わりに、 新しいオプションfileReplacements
in angular.json
。
the futureCLI 6.1の場合、これを拡張して、Sassファイルにまったく同じメカニズムを使用することができます。 environment.scss
とenvironment.prod.scss
を作成し、Sassファイルの@import "../../environments/environment"
の最初のファイルを参照して、angular.json
ファイルを調整するだけです。
"defaultProject": "ponyracer",
...
"projects": {
"ponyracer": {
...,
"architect": {
"build": {
...,
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
},
{
// BEWARE: this needs Angular CLI 6.1; see below
"replace": "src/environments/environment.scss",
"with": "src/environments/environment.prod.scss"
}
],
...
最後に、build --prod
、ng build --configuration=production
、またはbuild ponyracer --configuration=production
を使用してビルドします。
簡単で一貫性があります。
ただし、[〜#〜]注意[〜#〜]、Angular CLI 6.1がリリースされるまで、上記- 動作しません :
現在、ファイル置換機能はTSファイルに対してのみ機能します。具体的には、webpackコンパイラホストの一部であるファイルに対してのみ機能します。
どうやら、バグ修正 CLI 6.1に含まれる予定です 。
いいえ、そうではありません。
環境の.tsファイルのみ。 SASSはありません。
これがあなたができる他の何かです:
main.ts
-他のファイルへのロードに問題があったと思います)encapsulation: ViewEncapsulation.None
を含む2つの空のコンポーネントを用意します*ngIf
環境ファイルから保存した値に基づく2つのコンポーネントのそれぞれもう1つの方法は、ng eject
を呼び出して、CLIにプロジェクトを、構成を変更できる通常のWebpackプロジェクト(RC0以降)に変換させることです。