babel.config.js 中的环境变量

Ale*_*kov 5 javascript typescript babeljs expo

我们需要根据环境(local/dev/staging/production)修改我们的 React Native 应用程序(使用 Expo 构建)中的某些配置/变量。我已经查看了许多为此目的而设计的库,但似乎所有库都存在一个对我们的用例造成破坏的缺陷:

  • dotenv(因为它尝试在运行时访问 'fs' 而中断,因为它不再可用,因为它不是纯 JS 包并且不能被 Expo 捆绑)
  • react-native-config(不能与 Expo 一起使用,因为它需要本机代码作为插件的一部分)
  • react-native-dotenv(有点工作,但在内部缓存配置并忽略任何 .env 更改,直到修改导入变量的文件)

作为不需要第三方插件的更简洁的替代方案,我正在考虑使用 babel 的env选项,并将所有环境作为单独的 json 对象在babel.config.js. 但是,我没有看到太多关于此的文档或示例。难道我只是添加env在同一水平场presetsplugins包含productiondevelopment等等。如下面的例子中字段:

module.exports = (api) => {
    api.cache(true);
    return {
        presets: [...],
        env: {
            development: {
                CONFIG_VAR: 'foo'
            },
            production: {
                CONFIG_VAR: 'bar'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那行得通吗?CONFIG_VAR稍后我将如何在代码中访问它?

Cha*_*heo 9

尝试在我的 Expo 项目中设置环境变量时,我遇到了同样的问题。我为此使用了babel-plugin-inline-dotenv

  1. 安装插件

     npm install babel-plugin-inline-dotenv
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的babel.config.js文件中包含插件和 .env 文件的路径

 npm install babel-plugin-inline-dotenv
Run Code Online (Sandbox Code Playgroud)

  1. 在您的 .env.production 或 .env.development 文件中,添加如下环境变量:

     API_KEY='<YOUR_API_KEY>'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 稍后在您的代码中,您可以像这样访问上述变量:

     process.env.API_KEY
    
    Run Code Online (Sandbox Code Playgroud)

要访问您的ENV变量babel.config.js文件,使用dotenv这样的:

   require('dotenv').config({ path: './.env.development' })
   console.log('API_KEY: ' + process.env.API_KEY)

   module.exports = function() {
   // ...
   }
Run Code Online (Sandbox Code Playgroud)

  • 好的!但是你知道如何访问“babel.config.js”文件本身中“API_KEY”的值吗? (2认同)