创建反应应用程序不拿起.env文件?


117

我正在使用create react app引导我的应用程序。

我已经添加了两个.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: "" }

我尝试了不同的方法,但只是没有在开发文件中使用Veriable,我在做什么错?!

指令结构为:

/.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文件吗?
史蒂夫·查麦拉德

2
process.env是后端(Node或您正在使用的任何东西)可以读取的内容。前端捆绑软件不知道process.env浏览器中运行的是什么。您可以将webpack配置为在捆绑时将其传递到捆绑软件中,甚至更容易地从后端渲染为全局变量的索引文件中传递。
劳尔·雷内

可能不是这样,但是我已经遇到过几次了,我发现的问题是,当我的计算机使用大量内存时,我没有加载.env变量。我使用ubuntu 16.4。react-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callback如果仍然看不到它们,请尝试从终端加载变量,我会重新启动系统以降低内存使用率,然后通常再试一次,这样可以为我解决该问题。
Femi Oni

@RaulRene create-react-app可以直接处理.env,因为您无需进一步配置
Femi Oni

Answers:


245

使用create-react-app,您需要REACT_APP_在变量名之前添加前缀才能访问它。

例:

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

在这里查看更多信息


9
这是至关重要的。我错过了,但是是的,它不能使用前缀
Femi Oni,

8
这工作时,我使用.env,但不适合.env.development.env.production
shenku

@shenku你有没有设法找出为什么它只能.env和不.env.developmentenv.production
康斯坦丁基里拉

对于从事前端工作的Devs,因为您的浏览器中没有NodeJ,您将需要使用webpack ... meh
Stephane

2
谢谢。我一直在寻找答案几个小时。
法赫米德(Fahmid)

61

确保您的.env文件位于根目录中,而不是src文件夹中。


1
尽管在阅读文档时我发现它应该位于根目录中,但我仍然设法将.env文件添加到src文件夹中...(facepalm)感谢您的回答。
Corné

我有同样的问题,在src文件夹中时不起作用,但是在移入3.4.3版的根文件夹后起作用了
Vinod Kumar

29

遇到同样的问题!解决方案是关闭与我的节点服务器的连接(可以使用CTRL + C进行此操作)。然后使用“ npm run start”重新启动服务器,.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
Drazen Bjelovuk '20

2
create-react-app:create-react-app docs现在也支持开箱即用的用于不同环境的不同.env文件。无需显式使用dotenv(create-react-app实际上在后台使用它来处理环境变量)
Marnix.hoh

@MariaJeysinghAnbu,该语法属于dotenv-cli,而不是dotenvnpmjs.com/package/dotenv-cli
AMS777 '20

@ AMS777我使用的是dotenv npm,而不是dotenv-cli
Maria Jeysingh Anbu

@MariaJeysinghAnbu,我想使用dotenv但出现错误。我检查了文档,但没有-e在命令行中找到该选项。但是我在dotenv-cli文档中找到了它。这就是为什么我在说。我终于在使用env-cmd,没有dotenv同时dotenv-cli安装,这可能会导致混乱。
AMS777 '20

10

关于env-cmd。根据VMois在gitHub上的类似文章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
非常感谢,此评论救了我。create-react-app文档尚未更新,因此我想出了什么问题
CKA

1
你在这里救了我 我正在研究这个东西。谢谢
MDiesel

有人给这个人一块奖牌
Rittesh PV

7

为此,有env-cmd模块。通过npm安装,npm i env-cmd然后在您的package.json文件的scripts部分中:

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

在项目根目录中,您必须创建两个具有相同env变量但具有不同值的文件:

.env.development
.env.production

然后将其从公共场合排除。为此,请在.gitignore文件中添加两行:

.env.development
.env.production

因此,这是对dev和prod使用不同的env变量的正确方法。


尝试使用完整路径,例如:./node_modules/.bin/env
Nastro

但我不建议在答案中使用该方法。现在我知道,在反应技工给出的构建工作与.ENV
Nastro

6

我遇到了同样的问题,但这是因为我的.env文件使用YAML格式而不是JS。

它是

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

但它必须是

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

这样一个简单而又不错的地方。我做了同样的事情,看不到树木的木头。谢谢
安迪·艾里森

谢谢你!我整天都在搜索,没有注意到这个小错误:)
chia yongkang

3

如果.env文件的工作,但.env.development还是.env.production没有,然后创建一个空.env文件旁边那两个。我不知道为什么,但这对我有用。


0

并请记住,env文件中的API密钥后不要使用分号。

REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';

应该

REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'

那是我的错误


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.