5

Redux からの警告の背後にある問題に対処しようとして、React または Redux を使用して本番環境での使用に最適化されたビルドを生成するために envifying が必要なステップであることを説明するアドバイスに出くわしました。Envifyingは、 などのノード固有の環境変数を などprocess.env.NODE_ENVの実際の値に置き換えるプロセスとして説明されています'production'

Envifying が必要であり、上記の説明が正しいことを受け入れると、React や Redux などのクライアント側ライブラリにノード固有の環境変数が含まれていると想定されているように見えるため、混乱します。ええ、特にこれらのライブラリは、Isomorphic/Universal JavaScript アプリケーションの構築に人気があることは知っていますが、驚くべきことです。私はこれを正しく理解していますか?process.env.NODE_ENVもしそうなら、ノードの外でどこで使用されているかを知る必要があるパターンの説明はありますか?

アドバイスを正しく理解していれば、Webpack を使用している場合は、そのDefinePluginようなプラグインを使用することをお勧めします。

  new webpack.DefinePlugin({
    "process.env.NODE_ENV": process.env.NODE_ENV,
  }),

これには、NODE_ENV 変数を、クライアント側コード用に生成するビルドのターゲット環境に設定する必要があるようにも見えます。ビルド サーバーに環境変数を設定して、デプロイ先のサーバーで実際のコードが実行される環境を反映しているため、これは二重に奇妙です。

これはすべて、一般的なパターンに関して何かが欠けているように感じさせます。

関連情報:

4

1 に答える 1

4

Web アプリの本番および開発用のビルド / 条件も作成できます。あなたが言及したように、多くの同形 JS フレームワークがそれを利用しています。

envifyは、以下を使用するコードを主に 2 つの方法で支援します。process.env

  1. それをサポートするための shim の必要性を取り除きます。Browserify には、約 2kb で自動化されたクロックがあり、それは問題になる可能性があります。
  2. コードをより適切に縮小する- コードが優れた縮小ツールのようなものになると、コードif ("development" === "production")を完全に取り除くことができます

Webpack は (一般的にはクライアント側の) コードを変換するためのものであることを思い出してください。のすべてのインスタンスを本質的に検索置換するために何かを追加することprocess.envは、そのユース ケースの範囲内であり、新しい API を導入することなく環境ベースの動作を作成できます。でその値を設定することwebpack.configは、オペレーティング システムで環境変数を設定することとまったく同じです。

于 2016-03-01T05:44:41.353 に答える