React 中的配置文件

Profiles in React

我正在尝试弄清楚如何 运行 具有不同配置文件的 React 应用程序(通过 create-react-app 创建)。

也就是说,假设我有多个环境(本地、开发、生产)并且我有一个引用后端(部署在另一台服务器上)的提取。

后端对于每个环境都有自己的地址。我需要以某种方式为不同的启动设置全局变量。

例如,在 Springboot 中,这可以通过 application-"profile".properties.

完成

我运行 应用程序通过 npm install -g serve & serve -s build。怎么做?

使用 create-react-app 时,您可以使用环境变量配置您的应用程序。

这里的文档中有详细解释:https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables

所有环境变量都需要加上REACT_APP_前缀。

您可以使用 .env 文件定义具有不同环境变量的配置文件。

例如,要在生产环境中设置 API URL,请创建一个包含以下内容的文件 .env.production

REACT_APP_API_URL=https://my.beautiful.api/

…默认情况下(对于本地开发),创建一个文件 .env:

REACT_APP_API_URL=http://localhost:3001/
  • 当您使用 npm run build
  • 构建项目时,将使用 .env.production 文件中的环境变量
  • 当您使用 npm start
  • 在本地开发模式下处理项目时,将使用 .env 文件中的环境变量

在应用代码中使用环境变量的示例:

fetch(process.env.REACT_APP_API_URL)
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
});

我处理这种情况的方法是使用包 react-native-config 并且我创建了 .env 文件 (.env.dev, .env.staging, .env.prod) 和我在 package.json 中定义了一些脚本。不过,我正在使用 react-native init 项目。 如下

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest",
    "postinstall": "sed -i '' 's/#import <RCTAnimation\/RCTValueAnimatedNode.h>/#import \"RCTValueAnimatedNode.h\"/' ./node_modules/react-native/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h",
    "clean": "cd android && gradlew clean",
    "feature": "node scripts/createfeature.js",
    "component": "node scripts/createcomponent.js",
    "android": "cd android && gradlew app:assembleDebug && gradlew installDebug",
    "storybook": "storybook start -p 7007",
    "prestorybook": "rnstl",
    "android-dev": "SET ENVFILE=.env.dev && react-native run-android",
    "android-staging": "SET ENVFILE=.env.staging && react-native run-android",
    "android-prod": "SET ENVFILE=.env.prod && react-native run-android",
    "ios-dev": "ENVFILE=.env.dev react-native run-ios",
    "ios-staging": "ENVFILE=.env.staging react-native run-ios",
    "ios-prod": "ENVFILE=.env.prod react-native run-ios",
    "build-android-prod": "SET ENVFILE=.env.prod && cd android && gradlew assembleRelease"
  },