Create-React-App 未从 docker-compose.yml 读取环境变量

reactjs

1个回答

写回答

zyc0123

2025-06-25 17:05

+ 关注

JS
JS

在使用 Create-React-App 构建应用程序时,我们通常希望能够轻松地配置环境变量,以便在不同的环境中进行灵活的部署。然而,有时候我们可能会遇到一个问题,就是 Create-React-App 无法从 docker-compose.yml 文件中读取环境变量的情况。

首先,让我们来了解一下 Create-React-App 是什么。Create-React-App 是一个用于快速构建 React 应用程序的脚手架工具,它提供了一套现代化的开发环境和构建流程,使开发人员能够专注于编写代码而不必操心配置。

在一个典型的 React 应用程序中,我们通常会使用一些环境变量来存储一些敏感或者与环境相关的配置信息,比如 API 地址、认证密钥等等。而在使用 Docker 进行部署时,我们可以使用 docker-compose.yml 文件来定义和配置容器。在这个文件中,我们可以指定一些环境变量,以便在容器中使用。

然而,有时候我们会发现,尽管在 docker-compose.yml 文件中正确地设置了环境变量,但 Create-React-App 并没有正确地读取这些变量。这可能会导致应用程序在容器中无法正常运行,因为它无法获取到正确的配置信息。

那么,为什么会出现这个问题呢?原因是 Create-React-App 在构建过程中会使用一个名为 .env 的文件来存储环境变量。这个文件通常位于项目的根目录下,而不是容器中。因此,即使我们在 docker-compose.yml 文件中设置了环境变量,Create-React-App 也无法直接读取到这些变量。

为了解决这个问题,我们需要手动将环境变量传递给 Create-React-App。幸运的是,Create-React-App 提供了一个名为 REACT_APP_ 的前缀的环境变量,可以用于在构建过程中传递配置信息。

在 docker-compose.yml 文件中,我们可以使用 environment 关键字来设置环境变量。例如,我们可以这样设置一个名为 REACT_APP_API_URL 的环境变量:

yaml

version: '3'

services:

app:

build:

context: .

dockerfile: Dockerfile

ports:

- 3000:3000

environment:

- REACT_APP_API_URL=http://api.example.com

在上面的例子中,我们设置了一个名为 REACT_APP_API_URL 的环境变量,并将其值设置为 http://api.example.com。这样,当应用程序在容器中运行时,它就可以通过 process.env.REACT_APP_API_URL 访问到这个值了。

然而,这只是设置环境变量的一部分。为了让 Create-React-App 知道我们已经设置了这些环境变量,我们还需要在代码中进行一些修改。

为了让 Create-React-App 在构建时能够使用这些环境变量,我们需要将它们写入到 .env 文件中。我们可以使用 dotenv-cli 工具来实现这个目的。首先,我们需要在项目中安装 dotenv-cli:

shell

npm install dotenv-cli --save-dev

安装完成后,我们可以在 package.JSon 文件的 scripts 中添加一个新的命令来执行 dotenv-cli。例如:

JSon

"scripts": {

"start": "react-scripts start",

"build": "dotenv -e .env.${NODE_ENV} react-scripts build"

}

在上面的例子中,我们在 build 命令中添加了 dotenv -e .env.${NODE_ENV}。这个命令会根据当前的环境变量加载对应的 .env 文件。例如,在开发环境中,它会加载 .env.development 文件。

通过以上的修改,我们就成功地将环境变量传递给了 Create-React-App,并让它能够正确地读取到这些变量。这样,我们就能够在容器中轻松地部署我们的 React 应用程序了。

在使用 Create-React-App 构建应用程序时,我们有时会遇到 Create-React-App 无法从 docker-compose.yml 文件中读取环境变量的问题。这是因为 Create-React-App 在构建过程中使用的是 .env 文件来存储环境变量,而不是容器中的环境变量。为了解决这个问题,我们需要手动将环境变量传递给 Create-React-App,并在代码中进行一些修改。通过这些步骤,我们可以轻松地配置环境变量,并在容器中部署我们的应用程序。

希望本文能帮助到大家解决 Create-React-App 无法读取 docker-compose.yml 中环境变量的问题。祝大家使用 Create-React-App 构建出更好的应用程序!

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号