如何在Expo Prebuild中设置NODE_ENV为uat/qa环境?
如何在Azure Pipelines执行expo prebuild时指定NODE_ENV为uat/qa环境
一、在Azure Pipelines中注入目标环境变量
你可以通过两种方式在Pipeline任务里设置NODE_ENV:
直接在脚本命令中前置环境变量
根据Pipeline运行的操作系统,选择对应的命令格式:- Linux/macOS环境:
NODE_ENV=uat npx expo prebuild - Windows环境:
set NODE_ENV=uat && npx expo prebuild
如果需要跨平台兼容,可以先在项目中安装
cross-env(npm i -D cross-env),然后统一使用:npx cross-env NODE_ENV=uat npx expo prebuild- Linux/macOS环境:
通过Pipeline变量统一管理
在Azure Pipelines的「变量」面板中添加NODE_ENV变量,设置值为uat或qa;然后在脚本任务中引用该变量:NODE_ENV=$(NODE_ENV) npx expo prebuild这种方式更灵活,方便在不同Pipeline阶段或分支切换环境值。
二、确保项目配置能正确读取NODE_ENV
因为你用的是自定义配置结合app.json和babel.config.js,需要做以下适配:
babel.config.js中根据环境切换配置
直接在配置文件中读取process.env.NODE_ENV来调整插件或预设:module.exports = function(api) { api.cache(true); const currentEnv = process.env.NODE_ENV || 'development'; return { presets: ['babel-preset-expo'], plugins: [ currentEnv === 'uat' ? ['transform-remove-console'] : [], currentEnv === 'qa' ? ['babel-plugin-debug-macros'] : [] ] }; };将app.json改为app.config.js实现动态配置
静态的app.json无法直接读取环境变量,建议替换为app.config.js,这样可以根据NODE_ENV动态生成配置:const currentEnv = process.env.NODE_ENV || 'development'; module.exports = { expo: { name: currentEnv === 'uat' ? 'MyApp-UAT' : currentEnv === 'qa' ? 'MyApp-QA' : 'MyApp-Dev', bundleIdentifier: currentEnv === 'uat' ? 'com.myapp.uat' : currentEnv === 'qa' ? 'com.myapp.qa' : 'com.myapp.dev', // 其他Expo配置项 } };执行
expo prebuild时,Expo会自动读取这个动态配置文件生成对应的原生项目文件。
三、验证环境变量是否生效
在expo prebuild任务前添加一个脚本步骤,输出当前NODE_ENV值,确认变量已正确注入:
- Linux/macOS:
echo "当前NODE_ENV: $NODE_ENV" - Windows:
echo 当前NODE_ENV: %NODE_ENV%
内容的提问来源于stack exchange,提问作者Fiddle Freak
相关产品推荐
相关产品推荐

