私はDotEnvプラグインのインストールを終了しませんでしたが、Webpackページに記載されているDefinePluginソリューションを実装しました。私がnoobですので、私はドキュメントが混乱していることが分かりました。リストされた例は、 'process.env'変数(これは新しい概念です)を使用していないため動作しませんでした。
は、ここで私はこのシステムをセットアップするために使用される粗いステップバイステップガイドです:
- はWebPACKのを作成します。 envName .jsファイルをサポートする必要があります。
- ビルドセットアップの他に、カスタムプロパティを使用する各ファイルに
DefinePlugin
というエントリを作成します。私の最初のテストでは、webpack.commonで「グローバル」定数を作成すると他の環境が上書きされてしまい、そこでパラメータを設定することは避けました。
- "process.env"キーの下にDefinePlugin定数を作成します。これは、jsベースのシステムが特定のプロセスのデータを格納するために使用する特別なキーです。
- あなたの糸、ノード、mvnなどのビルドを変更して、ローカルの開発環境を利用してください。私の状況では、開発環境はクラウドにあるため、ローカライズされたテスト用にデフォルトの
local
環境を作成しました。
- 定義済みの定数は、それぞれの環境で、必要なインポートタイプステートメントなしでアクセスできるようになりました。
次に、スニペットの例を示します。私のwebpack.local。plugins
エントリの下のjsファイル:
...
new webpack.DefinePlugin({
'process.env': {
NAME: JSON.stringify('local'),
API_URL: JSON.stringify('http://localhost:8000/'),
}
})
...
のは、私は私のfakeService
typescriptですクラスでこれらの値にアクセスしたいとしましょう:
~/src/main/webapp/fake-service.ts
@Injectable
export class FakeService {
private URL_ROOT = process.env.API_URL + 'api/v2/externalService/resource/';
constructor(private http: HTTP) {}
get(): Observable<any> {
if(process.env.NAME == 'local') {
console.log("Calling url at " + this.URL_ROOT);
}
return this.http.get(this.URL_ROOT).map((res: Response) => res.json());
}
}
あり、これを行うには良い方法はおそらくある(またはになります未来)。アプリケーションにこのprocess.env依存関係を構築するのではなく、これらの値をロードし、このデータを利用する必要があるサービスまたはコンポーネントに注入できるサービスを作成することが賢明でしょう(Configuration
)。