.envファイルを取得しないreactアプリを作成しますか?


117

create reactappを使用してアプリをブートストラップしています。

ルートに2つの.envファイル.env.developmentを追加しました.env.production

私が.env.development含む:

API_URL=http://localhost:3000/api
CALLBACK_URL=http://localhost:3005/callback

を使用react-scripts startしてアプリを実行し、コンソール出力するprocess.envと、吐き出されます

{ NODE_ENV: "development", PUBLIC_URL: "" }

私はさまざまなことを試しましたが、開発ファイルで検証可能なものを取得していません。何が間違っているのでしょうか。

ディレクトリ構造は次のとおりです。

/.env.development
/src/index.js

Package.jsonスクリプトは次のとおりです。

"start": "export PORT=3005; npm-run-all --parallel server:start client:start",
    "client:start": "export PORT=3005; react-scripts start",
    "server:start": "node server.js",
    "build": "react-scripts build",

編集:

@jamcreenciaは、変数のREACT_APP。を付ける必要があることを正しく指摘しました。

編集2

ファイルに名前を付けて.envも問題ありませんが、.env.developmentまたはを使用した場合は機能しません.end.production


package.jsonファイルを投稿できますか?
Steve Chamaillard 2018年

2
process.envバックエンド(ノードまたは使用しているもの)が読み取ることができるものです。フロントエンドバンドルはprocess.env、ブラウザで実行されるときに何であるかを認識していません。バンドル時にバンドルで渡すようにwebpackを構成できます。さらに簡単に、グローバル変数としてレンダリングしているインデックスファイルのバックエンドから渡すこともできます。
Raul Rene

おそらくそうではありませんが、私はこれに数回遭遇しました。私が見つけた問題は、コンピューターが大量のメモリを使用しているときに、.env変数がロードされないことです。私はubuntu16.4を使用しています。それでも変数が表示されreact-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callbackない場合は、端末から変数をロードしてみてください。システムを再起動してメモリ使用量を減らし、通常はこれで解決します。
フェミ鬼

@RaulRene create-react-appは、追加の構成を必要としないため、箱から出して.envを処理します
Femi Oni

回答:


243

を使用すると、変数名にアクセスできるように、変数名のcreate-react-app前にプレフィックスを付ける必要がありREACT_APP_ます。

例:

REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_CALLBACK_URL=http://localhost:3005/callback

詳細はこちら


9
これは非常に重要です。私はそれを逃しましたが、ええ、それは接頭辞では機能しません
FemiOni18年

8
これは私が使用するときに機能します.envが、.env.developmentまたは.env.production
shenku 2018年

@shenkuは、あなたはそれがでのみ機能する理由を見つけるために管理したの.envではない.env.developmentenv.production
コンスタンティンChirila

あなたがブラウザでNodeJsを持っていないためのDevについては、フロントエンドの仕事をして、あなたはまあまあ...必要性のWebPACKになるだろう
ステファン・

2
ありがとうございました。私は何時間も答えを探していました。
Fahmid

61

.envファイルがsrcフォルダー内ではなく、ルートディレクトリにあることを確認してください。


1
ドキュメントを読んでいると、ルートディレクトリにあるはずですが、.envファイルをsrcフォルダーに追加することができました...(facepalm)ご回答ありがとうございます。
Corné

同じ問題が発生しました。srcフォルダー内では機能しませんでしたが、バージョン3.4.3のルートフォルダーに移動した後は機能しました
VinodKumar20年

29

これと同じ問題がありました!解決策は、ノードサーバーへの接続を閉じることでした(これはCTRL + Cで実行できます)。次に、「npm runstart」を使用してサーバーを再起動すると、.envが正しく機能するはずです。

出典:Github


21

のような複数の環境を使用したい場合 .env.development .env.production

dotenv-cliパッケージを使用する

プロジェクトのルートフォルダに追加.env.development.env.production

そしてあなたのpackage.json

"scripts": {
    "start": "react-app-rewired start",
    "build-dev": "dotenv -e .env.development react-app-rewired build",
    "build-prod": "dotenv -e .env.production react-app-rewired build",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test --env=jsdom",
    "eject": "react-scripts eject"   
},

次に、次のような環境に従って構築します

npm run-script build-dev 

これはありますdotenvdotenv-cli
DrazenBjelovuk20年

2
異なる環境に異なる.envファイルを使用することも、create-react-app:create-react- appdocsによってすぐにサポートされるようになりました。明示的dotenv使用する必要はありません(作成反応するアプリは、実際の環境変数を処理するために舞台裏でそれを使用しています)いいえ
Marnix.hoh

@MariaJeysinghAnbu、その構文はに属しますdotenv-cli、ではありませんdotenvnpmjs.com/package/dotenv-cli
AMS7

@ AMS777dotenv -cliではなくdotenvnpmを使用しています
Maria JeysinghAnbu20年

@MariaJeysinghAnbu、使用したかっdotenvたのですが、エラーが発生しました。ドキュメントを確認しましたが-e、コマンドラインにそのオプションが見つかりませんでした。しかし、私はそれをdotenv-cliドキュメントで見つけました。そういうわけで私は言っていました。私は最終的に使用していますenv-cmd持っている、いないdotenvdotenv-cli混乱を招く可能性がある、同時にインストールされています。
AMS7 7720

10

env-cmdについて。gitHubに関するVMoisの親切な投稿に従ってenv-cmdが更新され(執筆時点ではバージョン9.0.1)、環境変数はReactプロジェクトで次のように機能します。

"scripts": {
    "build:local": "env-cmd -f ./.env.production.local npm run build",
    "build:production": "env-cmd -f ./.env.production npm run build"
  }

あなたにpackage.jsonのファイル。


1
どうもありがとう、このコメントは私を救った。私が間違っているものを考え出すたので作成反応するアプリのドキュメントには、この更新されていません
CKA

1
あなたは私をここで完全に救った。私はこのことで回転していました。ありがとう
MDiesel

誰かがこの男にメダルを与える
RitteshPV20年

7

この目的のために、env-cmdモジュールがあります。npmを介してインストールし、セクションのファイルにインストールnpm i env-cmdします。package.jsonscripts

  "scripts": {
    "start": "env-cmd .env.development react-scripts start",
    "build": "GENERATE_SOURCEMAP=false env-cmd .env.production react-scripts build",
  }

プロジェクトルートで、環境変数が同じで値が異なる2つのファイルを作成する必要があります。

.env.development
.env.production

次に、それらを公開から除外します。これを.gitignoreファイルに追加するには、次の2行を追加します。

.env.development
.env.production

したがって、これはdevとprodに異なる環境変数を使用する適切な方法です。


次のようなフルパスを使用してみてください:./ node_modules / .bin / env
Nastro

しかし、私は私の答えのアプローチをお勧めしません。今、私は反応が.envと仕事にメカニックにビルドを与えることを知っている
ナストロ

6

同じ問題が発生していましたが、.envファイルがJSではなくYAML形式であったことが原因でした。

そうだった

REACT_APP_API_PATH: 'https://my.api.path'

しかし、それはする必要がありました

REACT_APP_API_PATH = 'https://my.api.path'

とてもシンプルでありながら良い場所です。私も同じことをしていて、木のための木が見えませんでした。おかげで
アンディ・アリソン

これをありがとう!私はこのわずかなエラーに気付かずに一日中検索していました:)
chiayongkang20年

3

場合は.env、ファイルが動作しますが、.env.developmentまたは.env.production、空作成していない.envものを2と一緒にファイルを。理由はわかりませんが、これでうまくいきます。


0

また、envファイルのAPIキーの後にセミコロンを付けないように注意してください。

REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';

する必要があります

REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'

それは私の間違いでした


-3

最新のreact-scripts(3.2.0)の時点では、言うのは簡単です

PORT=4000
BROWSER=none

ルートフォルダにあるはずの.envまたは.env.developmentファイル(..etc)にあります。

REACT_APPプレフィックスでは機能せず(ドキュメントは古くなっていると思います)、追加のnpmパッケージは必要ありません(react-scriptsにはすでにdotenv 6.2.0が含まれています)


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