uni-app h5自定义条件编译无法获取

uni-app h5自定义条件编译无法获取

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

示例代码:

{
    "uni-app": {  
        "scripts": {  
            "test_dolphin_app_h5": {  
                "title": "测试环境",  
                "BROWSER": "",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "APP_ENV": "test-dolphin-reader-h5"  
                },  
                "define": {  
                    "TEST_DOLPHIN_APP_H5": true  
                }  
            }  
        }  
    }
console.log(process.env.APP_ENV)

或者

// #ifdef TEST_DOLPHIN_APP_H5  
测试环境所需代码  
// #endif

操作步骤:

发行-自定义发行 HBuilder X 3.2.8没有问题,升级到3.2.9就有问题了.

预期结果:

可以正常获取自定义条件编译

实际结果:

console.log(process.env.APP_ENV)为undefined
条件编译不生效
// #ifdef TEST_DOLPHIN_APP_H5
测试环境所需代码
// #endif

更多关于uni-app h5自定义条件编译无法获取的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

经测试,已复现此问题,正在排查。

更多关于uni-app h5自定义条件编译无法获取的实战教程也可以访问 https://www.itying.com/category-93-b0.html


好的,感谢您的回复。

此问题已在 alpha 3.2.10 中修复

请问修复了吗,我用3.2.12配置为什么打印还是undefined

回复 Rongshi: 如果还有问题可以升级至最新版重试,此问题是修复了的

回复 DCloud_UNI_LXH: 我这边也出现了这个问题自定义条件编译不生效,之前uni-app编译器旧版本是可以的后面升级到了最新版本就不行了

回复 y***@yinjing.vip: 自定义条件编译怎么写的?贴代码看看。使用的什么版本自定义条件编译失效了?

回复 DCloud_UNI_LXH: 最新的3.3.10版本自定义编译也有问题,不执行编译条件的逻辑

回复 c***@swiftpass.cn: 没有发现有此类问题

3.3.11 又有问题了 输出环境变量依然是undefined

回复 DCloud_UNI_LXH: 麻烦再排查一下

根据你的描述,这很可能是 HBuilderX 3.2.9 版本引入的一个已知问题或变更。在 uni-app 中,自定义条件编译和 process.env 的注入依赖于构建流程。从 3.2.8 到 3.2.9 的升级可能影响了这一机制。

核心问题分析:

  1. process.env.APP_ENVundefined:这通常意味着在构建时,uni-app 脚本中定义的 env 变量没有正确注入到 process.env 对象中。这属于构建配置的传递问题。
  2. 条件编译不生效:自定义条件编译标志(如 TEST_DOLPHIN_APP_H5)未在编译阶段被识别,导致相关代码块被错误地移除或保留。

直接解决方案:

回退版本:最直接有效的方法是暂时回退到 HBuilderX 3.2.8 版本,直到官方修复此问题。你可以从 HBuilderX 官网的历史版本中下载并安装 3.2.8。

检查与变通方案(如果必须使用 3.2.9+):

  1. 检查 package.json 配置:确保你的 package.jsonuni-app 脚本配置完全正确,且位于根目录。你提供的配置示例结构是正确的。
  2. 使用 process.UNI_SCRIPT_ENV:在 HBuilderX 的部分版本中,自定义脚本的环境变量可能需要通过 process.UNI_SCRIPT_ENV 来访问,而不是直接挂在 process.env 下。你可以尝试在代码中同时打印这两个对象进行调试:
    console.log('process.env:', process.env);
    console.log('process.UNI_SCRIPT_ENV:', process.UNI_SCRIPT_ENV);
回到顶部