2017-08-08 7 views
1

後に環境変数を読み取ることができない私はcreate-react-appで作成し、アプリを反応させてきた反応します開発コードはENV=production npm run startを実行することによってそれが、私はまたのWebPACKのPRODの設定に上記のスクリプトを追加作成はその後、私はコマンドを使用してアプリケーションを構築するアプリがビルド

new webpack.DefinePlugin({ 
     'process.env':{ 
     'ENV': JSON.stringify(process.env.ENV), 
     } 
    }), 

WebPACKのdevのコンフィグにこのプラグインを追加しているbeacause process.env.ENV変数を読んで、私は、このコマンドをしようとした後ENV=prod serve -s buildを構築することができますそれはenvirを読むことができません変数

これを修正するには?

(1)あなたはその場でアプリのファイルとのバンドルを見てwebpack開発モードでは:あなたがENV VARを読み取ることができない理由

答えて

2

理由があるためです。また、(DefinePluginのため)process.env.ENVが読み込まれ、グローバル変数として追加されます。したがって、基本的にはprocess.envからJSアプリに変数を配管しています。

(2)あなたは(webpackで)ビルドあなたのアプリをした後すべてがすでに一個の以上のファイルに束ねています。 serveを実行すると、スタティックビルドファイルを提供するHTTPサーバーを起動するだけです。したがって、ENVをアプリにパイプする方法はありません。

基本的にDefinePluginは、varをバンドルに追加します。例えば。 JSファイルは静的あなたは/ webpackでそれを構築同梱しました後にこの変数を変更する方法がないですので、

var token = '12356234ga5q3aesd'; 

new webpack.DefinePlugin({ 
    'token': '12356234ga5q3aesd' 
}) 

は、このような行を追加します。基本的にnpm run buildを実行すると、コンパイル済みバイナリ/ .dll/.jar/...ファイルが作成され、プラグインを介してその内容に影響を与えることはできません。

+0

解決策は、静的フラグ変数を、DefinePluginと一緒に追加する必要があります。これは、プロダクションかデベロッパーかを示します。または何か解決策がありますか? – Mamen

+1

はい、CRAは 'process.env'の下にeverthingをdefineプラグインに追加するように設定されています。 https://github.com/facebookincubator/create-react-app/blob/e12d053c273037c5ec75971ddcd117b3e9858cdf/packages/react-scripts/config/env.js#L89-L95を参照してください また、自動的にprod/devをあなたに設定します - > ' process.env.NODE_ENV' –

関連する問題