[解決済み] reactプロジェクトでdotenvを使用することは可能ですか?
質問
私はいくつかの環境変数を設定しようとしています(dev/prodのエンドポイントへのAPIコールを行うため、dev/prodに依存するキーなど)、dotenvを使用して動作するかどうか疑問に思っています。
dotenvをインストールし、webpackを使用しています。
私のwebpackのエントリは
main.js
で、このファイルには
require('dotenv').config()
そして、webpackのconfigに、こう書いています。
new webpack.EnvironmentPlugin([
'NODE_ENV',
'__DEV_BASE_URL__' //base url for dev api endpoints
])
しかし、まだ未定義です。 どうしたら正しくできるのでしょうか?
どのように解決するのですか?
短い答えは「いいえ」です。ブラウザはローカルまたはサーバーの環境変数にアクセスできないので、dotenvは何も探すものがありません。代わりに、React アプリケーションで、通常は settings モジュールで、通常の変数を指定します。
Webpackは、ビルドマシンから環境変数を取得し、設定ファイルに焼き付けるようにすることができます。しかし、実際に文字列を置き換えるのは、実行時ではなく、ビルド時です。そのため、アプリケーションの各ビルドには、値がハードコーディングされています。これらの値は
process.env
オブジェクトを通してアクセスできるようになります。
var nodeEnv = process.env.NODE_ENV;
さらに
DefinePlugin
を使うことで、ビルドターゲット (dev, prod, など) に応じて異なる値を明示的に指定することができます。ただし、この場合
JSON.stringify
に渡されるすべての値を指定する必要があります。
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),
これはどんな種類の公開情報でも構いませんが、次のようにすべきです。 秘密鍵、パスワード、API の秘密などには決して使用しないでください。 . これは、焼き付けられた値はすべて一般にアクセス可能であり、機密情報を含む場合は悪意を持って使用される可能性があるためです。これらの種類のものについては、サーバーサイドのコードをいくつか書いて、秘密を使用してサードパーティのAPIで認証できる簡単なAPIを構築し、関連する詳細をクライアントサイドのアプリケーションに渡す必要があります。サーバー側APIは仲介役として機能し、必要なデータを取得しながらも、秘密を保護します。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JSのDateからDay名
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] これは純関数ですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除