Reactプロジェクトへの.envファイルの追加


84

githubにコミットするときのために、APIキーを非表示にしようとしています。フォーラムを調べて、ガイダンス、特に次の投稿を探しました。

create-react-appでAPIキーを非表示にするにはどうすればよいですか?

変更を加えて、糸を再開しました。何が間違っているのかわかりません-.envプロジェクトのルートにファイルを追加し(名前を付けましたprocess.env)、ファイルにファイルを追加しましたREACT_APP_API_KEY = 'my-secret-api-key'

fetchApp.jsでキーを追加する方法かもしれないと思っており、テンプレートリテラルを使用しないなど、複数の形式を試しましたが、プロジェクトはまだコンパイルされません。

どんな助けでも大歓迎です。

performSearch = (query = 'germany') => {
    fetch(`https://api.unsplash.com/search/photos?query=${query}&client_id=${REACT_APP_API_KEY}`)
    .then(response => response.json())
    .then(responseData => {
        this.setState({
            results: responseData.results,
            loading: false
        });
     })
     .catch(error => {
            console.log('Error fetching and parsing data', error);
     });
}


process.env名前を付けて.env.local or .env.process srcディレクトリの外に置く代わりに
RIYAJKHAN18年

1
こんにちは@RIYAJKHAN私は.env.localにファイルを変更したのだが、外の間違いsrcディレクトリですが、私はまだREACT_APP_API_KEYを得ていることは定義されていません:/
ビアンカM

1
私にとってそれを修正したのは、ローカル開発サーバーを実行しているターミナルを閉じて、再実行することnpm run startでした。
n00bAppDev 2018年

3
反応アプリで秘密を隠すことはできません。stackoverflow.com/a/46839021/4722345
JBallin 2018年

5
シークレットを保存するためにこれを使用しないでください。ドキュメント...WARNING: Do not store any secrets (such as private API keys) in your React app! Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
Nishantメータ

回答:


97

4ステップ

  1. npm install dotenv --save

  2. 次に、次の行をアプリに追加します。

    require('dotenv').config()

  3. 次に.env、アプリケーションのルートディレクトリにファイルを作成し、それに変数を追加します。

// contents of .env 

REACT_APP_API_KEY = 'my-secret-api-key'
  1. 最後に、ファイルに追加.envして.gitignore、Gitがそれを無視し、GitHubで終了しないようにします。

create-react-appを使用ている場合は、手順3と4のみが必要ですが、変数が機能するためには最初から始める必要があることに注意してREACT_APP_ください。

参照:https//create-react-app.dev/docs/adding-custom-environment-variables/

- .envファイルに変数を追加した後、再起動アプリケーションする必要があります。

リファレンス-https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f


34
「create-react-app」を使用してreactアプリケーションを作成する場合は、.envファイルに変数を追加した後にアプリケーションを再起動する必要があります。変数名の前に「REACT_APP_」を使用します。
vikash 2018年

@tarzen chughたとえば、アプリをAWSにデプロイする場合はどうなりますか。.envはgitignoreの一部なので、無視されませんか?どうすればそれを本番環境に含めることができますか?
user27635 5719年

@vikashこれは私にとってはそれでした、小さなコメント大きな影響
BenyamEphrem19年

どこに追加しrequire('dotenv').config()ますか?どのファイル?
aqteifan

@aqteifan uはそのスニペットを追加する必要はありませんが、.ENVファイルの命名が重要な役割を果たします
テスト済み

83

だから私はReactに不慣れで、それを行う方法を見つけました。

このソリューションでは、追加のパッケージは必要ありませ

ステップ1ReactDocs

上記のドキュメントでは、シェルでのエクスポートやその他のオプションについて言及していますが、説明しようとしているのは.envファイルの使用です。

1.1 Root /.envを作成します

#.env file
REACT_APP_SECRET_NAME=secretvaluehere123

それは重要な注意しなければならないと起動REACT_APP_

1.2ENV変数にアクセスする

#App.js file or the file you need to access ENV
<p>print env secret to HTML</p>
<pre>{process.env.REACT_APP_SECRET_NAME}</pre>

handleFetchData() { // access in API call
  fetch(`https://awesome.api.io?api-key=${process.env.REACT_APP_SECRET_NAME}`)
    .then((res) => res.json())
    .then((data) => console.log(data))
}

1.3ビルド環境の問題

したがって、ステップ1.1 | 2を実行した後、それが機能していなかったので、上記の問題/解決策を見つけました。Reactは、ビルド時にenvを読み取り/作成するため、変数が更新されるように.envファイルを変更するたびにnpm runstartを実行する必要があります。


7
私の意見では、これは正解です!追加のパッケージは必要なく、環境変数をインポートするための適切なReactの方法。他の方法でも機能しますが、これがすでに行われているのに、なぜパッケージとコード構成を追加するのですか?素晴らしい答えです!
ryanm

12
私はこれを逃しましたREACT_APP_ありがとう。他の誰もそれについて言及しませんでした。
ローティミ-最高の

これはどういうわけか私にはうまくいきませんでした。私が取得undefined
SI8

@ Si8は、エラー/プロセスを拡張できますか。どのステップを取得undefinedしましたか?.envに新しい変数を追加した後、アプリを再起動しましたか?1.3
T044 3519

@ T04435この答えをありがとうメイトは魅力のように働いたREACT_APP_ここでの鍵です。また、dev / beta / productionを使用しているサーバーごとに構成するにはどうすればよいですか?サーバーごとに異なるenvファイルを使用する必要がありますか?
KannanT19年

33

今日、それを行うためのより簡単な方法があります。

ルートディレクトリに.env.localファイルを作成し、そこに変数を設定するだけです。あなたの場合:

REACT_APP_API_KEY = 'my-secret-api-key'

次に、そのようにjsファイルでそれを呼び出します。

process.env.REACT_APP_API_KEY

Reactはreact-scripts@0.5.0以降、環境変数をサポートしています。これを行うために外部パッケージは必要ありません。

https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env

*注:create-react-appは、プロジェクトの作成時にこのファイルをgitignoreに追加するため、.envではなく.env.localを提案します。

ファイルの優先度:

npm start:.env.development.local、.env.development、.env.local、.env

npm run build:.env.production.local、.env.production、.env.local、.env

npmテスト:.env.test.local、.env.test、.env(.env.localが欠落していることに注意してください)

詳細:https//facebook.github.io/create-react-app/docs/adding-custom-environment-variables


固有名詞は私のために仕事をしました。私は.env.devを使用しましたが、Reactは.env.developmentを探していたので.envにフォールバックしました
Omnibyte

25

Webpackユーザー

webpackを使用している場合は、dotenv-webpackプラグインをインストールして使用できます。これを行うには、以下の手順に従います。

パッケージをインストールします

yarn add dotenv-webpack

.envファイルを作成する

// .env
API_KEY='my secret api key'

webpack.config.jsファイルに追加する

// webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

コードで次のように使用します

process.env.API_KEY

詳細および構成情報については、こちらをご覧ください。


webpack-devserverを使用している場合は、再起動するまで変更は表示されません。
アイザックパック

これは私にとって最良の解決策でした。ありがとう。注:サーバーサイドレンダリングを使用しているため、両方のWebpackファイル(クライアントも)を更新する必要がありました。
ホルヘマウリシオ

@Aminu Kanoソースでbundle.jsファイルをオンラインで表示しても、APIキーが表示されている場合に、このアプローチを使用する意味を教えてください。
Linas M.

@LinasM。確かにそうですが、「オンライン」とはどういう意味ですか?
アミヌカノ

1
@AminuKano、はい、それはポイントを非常に明確に説明しました。ありがとう
Linas M.

9

1.ルートフォルダに.envファイルを作成します

一部の情報源は使用.env.developmentを好みます.env.productionが、それは必須ではありません。

2.変数の名前はREACT_APP_YOURVARIABLENAMEで始まる必要があります

環境変数がそのように開始されない場合、問題が発生するようです

3.変数を含めます

コードに配置するだけで環境変数を含める process.env.REACT_APP_VARIABLE

外部依存関係をインストールする必要はありません


私は同じことをしますが、コンソールに未定義が表示されます
PRADIP GORULE

確認できます。これは動作しません。
仮説

1
値が未定義として取得されている場合は、再度コンパイルしてください。
匿名

8

npm installenv-cmdをインストールする必要があります

ルートディレクトリに.envを作成し、次のように更新します。REACT_APP_は、変数名の必須のプレフィックスです。

REACT_APP_NODE_ENV="production"
REACT_APP_DB="http://localhost:5000"

package.jsonを更新します

  "scripts": {
    "start": "env-cmd react-scripts start",
    "build": "env-cmd react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

6
  1. dotenvdevDependenciesとしてインストールします。
npm i --save-dev dotenv
  1. .envルートディレクトリにファイルを作成します。
my-react-app/
|- node-modules/
|- public/
|- src/
|- .env
|- .gitignore
|- package.json
|- package.lock.json.
|- README.md
  1. .env以下のようにファイルを更新します。REACT_APP_は変数名の必須プレフィックスです。
REACT_APP_BASE_URL=http://localhost:8000
REACT_APP_API_KEY=YOUR-API-KEY
  1. [オプションですがグッドプラクティス]これで、変数を格納する構成ファイルを作成し、変数をエクスポートして、他のファイルから使用できるようになりました。

たとえば、という名前のファイルを作成し、base.js次のように更新します。

export const BASE_URL = process.env.REACT_APP_BASE_URL;
export const API_KEY = process.env.REACT_APP_API_KEY;
  1. または、次の方法でJSファイルの環境変数を呼び出すこともできます。
process.env.REACT_APP_BASE_URL

単一の.envファイルのみを使用する場合、開発環境と製品環境をどのように区別しますか?イム意識し、我々の作成する必要性.env.development.env.prodファイルが、どのように我々はあなたの方法を使用して、それらを区別するのですか?
ameyaraje

@ameyaraje基本的に、の.envファイルは無視します.gitignore。したがって、展開時に、.envファイルをサーバーにコピーし、BASE_URLおよびその他の必要な値を変更するだけです。このように、最新のコードをデプロイする必要がある場合は、gitマスターからプルしてデプロイするだけです。私たちは.envそれを無視し、最初にサーバーに設定しているので、それについては考えていません。ありがとう!
Fatema T. Zuhora

process.env.REACT_APP_API_KEYは、未定義を示す値を提供していません。サーバーを停止し、npm startで再起動しました
vikramvi

@vikramvi REACT_APP_BASE_URL.envファイルのsameという名前の変数に値を入れますか?
Fatema T. Zuhora

@ FatemaT.Zuhoraそれは私の悪いことでした、私はルートディレクトリの下に置く代わりに誤って子ディレクトリに.envを置いていました
vikramvi

0

として値を取得している場合はundefined、ノードサーバーを再起動して再コンパイルすることを検討する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.