uni-app Vue3 自定义编译条件不生效且报错
uni-app Vue3 自定义编译条件不生效且报错
产品分类:
uniapp/H5
PC开发环境操作系统:
Windows
PC开发环境操作系统版本号:
w10
HBuilderX类型:
正式
HBuilderX版本号:
3.2.9
浏览器平台:
Chrome
浏览器版本:
94
项目创建方式:
HBuilderX
示例代码:
"uni-app": {
"scripts": {
"H5-dev": {
"title": "开发环境H5",
"env": {
"UNI_PLATFORM": "h5"
},
"define": {
"ENV-DEV": true
}
},
"mp-dingtalk": {
"title": "钉钉小程序",
"env": {
"UNI_PLATFORM": "mp-alipay"
},
"define": {
"MP-DINGTALK": true
}
}
}
}
// #ifndef ENV-DEV
console.log('ENV-DEV')
// #endif
操作步骤:
运行到自定义环境
预期结果:
不报错
实际结果:
14:18:49.274 2:18:48 ┤F10: PM┤ [vite] Internal server error: ENV_DEV is not defined
14:18:49.274 Plugin: vite:uni-pre
14:18:49.276 File: D:/test/uniapp_vue3/hello/App.vue
...
bug描述:
Vue 3 自定义条件编译不生效
更多关于uni-app Vue3 自定义编译条件不生效且报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更新到HBuilderX 3.2.10 alpha 是否还存在此问题?
更多关于uni-app Vue3 自定义编译条件不生效且报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
vue3 可以直接执行cli命令 npm run dev:h5 H5-dev 吗?最新版本3.3.10执行自定义编译模式都不生效
回复 c***@swiftpass.cn: 详见文档 请查看相关问题:https://ask.dcloud.net.cn/question/139125
HBuilderX 3.3.11已修复
根据你的描述,这是一个在 uni-app Vue3 项目中使用自定义条件编译时遇到的常见问题。核心原因在于 Vue3 项目(使用 Vite 构建)与 Vue2 项目(使用 Webpack 构建)处理条件编译的方式有显著区别。
你的配置和代码在 Vue2 项目中是有效的,但在 Vue3 项目中,package.json 里 uni-app 节点下的自定义编译条件定义不会被 Vite 读取,因此 ENV-DEV 这个条件编译标记未被定义,导致预处理阶段报错 ENV_DEV is not defined。
解决方案如下:
你需要将自定义的条件编译变量定义在项目的根目录下的 vite.config.js (或 vite.config.ts) 配置文件中。这是 Vite 构建工具的入口配置文件。
-
创建或修改
vite.config.js: 在你的项目根目录下,找到或创建vite.config.js文件。 -
配置
define选项: 在vite.config.js中,你需要使用define选项来定义全局的替换常量。这与你在package.json中尝试做的define是类似概念,但这里是 Vite 的正确配置位置。// vite.config.js import { defineConfig } from 'vite' import uni from '@dcloudio/vite-plugin-uni' export default defineConfig({ plugins: [uni()], define: { // 在这里定义你的自定义条件编译常量 // 键名需要与你条件编译中使用的完全一致 'ENV-DEV': true, // 或 false,根据你的环境逻辑 'MP-DINGTALK': false, // 示例 } }) -
修改你的条件编译代码: 你的条件编译语法是正确的,无需更改。确保代码中的标记与
vite.config.js中define的键名一致。// #ifdef ENV-DEV console.log('ENV-DEV 已定义,这段代码在开发环境H5下会执行'); // #endif // #ifdef MP-DINGTALK console.log('这段代码在定义了MP-DINGTALK时为true时会执行'); // #endif

