uni-app在HBuilderX中云打包成安卓app,如何自定义当前环境mode?

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app在HBuilderX中云打包成安卓app,如何自定义当前环境mode?

使用uni cli创建的项目

希望能通过在vite.config.ts配置mode来指定环境

但是在云打包时,@dcloudio/vite-plugin-uni中的initEnv方法中固定将mode设置为process.env.NODE_ENV,也就是production

export function initEnv(  
  type: 'unknown' | 'dev' | 'build',  
  options: CliOptions  
) {  
  // ...  
  if (!options.mode) {  
    options.mode = process.env.NODE_ENV  
  }  
  // ...  
}

并且由于HbuilderX中云打包app时,不支持--mode参数(使用HBuilderX Cli同样不支持--mode参数),导致mode无法自定义。

设置mode的步骤是否可去掉,优先使用配置文件中的mode


1 回复

在uni-app中使用HBuilderX进行云打包时,自定义当前环境(mode)通常涉及到配置管理,可以通过manifest.json文件中的mp-weixin(或其他平台配置)部分来设置环境变量。不过,对于安卓打包,特别是云打包,我们通常使用manifest.jsonapp-plus部分来定义全局变量或条件编译标志,以实现不同环境的区分。

以下是一个示例,展示如何在manifest.json中设置自定义环境变量,并在代码中根据这些变量进行条件编译或逻辑处理。

步骤一:在manifest.json中定义环境变量

manifest.jsonapp-plus部分,你可以添加自定义字段来定义环境变量。虽然manifest.json没有直接的环境变量字段,但你可以使用distribute或其他自定义字段来模拟这一功能。

{
  "app-plus": {
    "distribute": {
      "environments": {
        "development": {
          "API_BASE_URL": "https://dev.example.com"
        },
        "production": {
          "API_BASE_URL": "https://prod.example.com"
        }
      },
      "currentEnv": "development" // 这里设置当前环境
    }
  }
}

注意:distribute字段是自定义的,不是uni-app官方字段,仅用于示例。

步骤二:在代码中读取环境变量

由于manifest.json中的自定义字段不能直接被JavaScript代码访问,你需要在构建过程中将这些变量注入到代码中。这通常通过构建脚本或条件编译指令实现。但考虑到云打包的限制,这里展示一种简化的方法,即在构建前手动替换代码中的占位符。

例如,你可以在项目的某个配置文件中(如config.js)定义这些变量,然后根据manifest.json中的设置替换它们:

// config.js
const manifest = require('../manifest.json');
const currentEnv = manifest['app-plus'].distribute.currentEnv || 'development';
const envConfig = manifest['app-plus'].distribute.environments[currentEnv] || {};

module.exports = {
  API_BASE_URL: envConfig.API_BASE_URL || 'https://default.example.com'
};

然后在你的应用代码中引入这个配置文件:

import config from '@/config';

console.log('API Base URL:', config.API_BASE_URL);

注意

上述方法需要你在每次更改环境时手动更新manifest.json中的currentEnv值,并且确保构建脚本或开发流程能够正确处理这些变量。对于更复杂的环境管理需求,可能需要引入更专业的构建工具或CI/CD流程来自动化这一过程。

回到顶部