繁体   English   中英

babel.config.js 中的环境变量

[英]environment variables in babel.config.js

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

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

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

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

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

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

  1. 安装插件

     npm install babel-plugin-inline-dotenv
  2. 包括插件和路径.ENV文件在您babel.config.js文件

 module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], env: { production: { plugins: [["inline-dotenv",{ path: '.env.production' }]] }, development: { plugins: [["inline-dotenv",{ path: '.env.development' }]] } } }; };

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

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

     process.env.API_KEY

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

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

   module.exports = function() {
   // ...
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM