my question about Server-side renderingへの回答に基づいて、私はAngular2アプリでAOTコンパイルを実装しています。Angular2 AOT静的外部jsファイルを使用したコンパイル
問題のバックグラウンド私は、Visual Studio Onlineで実行されているビルドがwebpackなどを実行しており、機能するWebアプリケーションを提供しています。次に、さまざまな環境(環境、ベースURL、重要なキー)をenv-config.js
ファイルに格納する異なる環境へのVSOのリリースを行います。このenv-config.js
ファイルは、アプリケーション内にバンドルされてパッケージ化されていませんが、Angularコード内のグローバル変数としてアクセスします。 app-config.ts
内
ENV-config.jsの
var envConfig = {
'environment': 'local',
'baseApiUrl': 'localhost:5555',
}
、我々は定数としてこれを保存、ウィンドウオブジェクトからenvConfig
にアクセスし、我々は次にOpaqueToken
を用いapp.module
に登録定数AppConfig
をエクスポート。
アプリ-config.ts
export function getEnvConfig(): IAppEnvConfig {
if (window == null) {
return {
'environment': '',
'baseApiUrl': ''
};
}
else {
return (window as any).envConfig;
}
}
export const _envConfig: IAppEnvConfig = getEnvConfig();
export const AppConfig: IAppConfig = {
applicationName: 'Web Application',
environment: _envConfig.environment,
baseApiUrl: _envConfig.baseApiUrl,
otherSetting: 'someValue'
}
これは、JITコンパイラでブラウザで実行されているだけでなく実際に動作します。私は、thisとthisの組み合わせと、AOTコンパイルを可能にする他のチュートリアルに従っています。 NGCを実行
は私に次のエラーを与える:
"node_modules/.bin/ngc" -p app/tsconfig-aot.json Error encountered
resolving symbol values statically. Calling function 'getEnvConfig',
function calls are not supported. Consider replacing the function or lambda
with a reference to an exported function, resolving symbol AppConfig
私はwindow
は、ブラウザ以外のコンパイル時に利用できるようになるとは思わないので、私はgetEnvConfig()
でwindow == null
のチェックを追加しました。 getEnvConfig()
が空のIAppEnvConfig
オブジェクトを返す以外の処理を行うと、ngcエラーが発生します。
私は多くのGoogle検索を行っていますが、私がここでやろうとしたクラスの新しいインスタンスを作成するためのファクトリ関数の使用を指している一般的な答え以外は何も見つかりませんでした。
申し訳ありません申し訳ありませんがそれほど意味がありません - 私は非常にばかげた何かをやっていることを明確にする/私に教えてください。事前に
おかげで、 アレックス
ありがとうございます!これをあなたのapp.module.tsにどのように登録して、それをDIと共に使うことができますか?あなたはまだOpaqueTokenを使用していますか、あるいは単にサービスと同じように注入しますか? – Alex
これは普通のクラスなので、DIが必要だと思いません。私はOpaqueTokenを使ったことは一度もありませんが、InjectionTokenに置き換えられていることを読んでいます。それほど、これはすべて私にとって過酷なものではないようですが、CLIにはこのためのオプションが組み込まれています:https://github.com/angular/angular-cli/wiki/stories-application-environments –
これはどのように機能しましたか? –