uni-app 更新3.98后设置target: 'esnext'编译报错 [plugin:uni:app-nvue-esbuild] exports is not defined
uni-app 更新3.98后设置target: 'esnext’编译报错 [plugin:uni:app-nvue-esbuild] exports is not defined
操作步骤:
- 在vite.config.ts设置target: ‘esnext’
预期结果:
- 正在编译运行
实际结果:
- [plugin:uni:app-nvue-esbuild] exports is not defined
bug描述:
- 更新3.98后 在vite.config.ts设置target: ‘esnext’ 后H5运行没有问题 app运行编译报错 [plugin:uni:app-nvue-esbuild] exports is not defined
信息类别 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC系统版本号 | 13.4.1 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.98 |
手机系统 | Android |
手机系统版本 | Android 11 |
手机厂商 | 小米 |
手机机型 | Redmin Note 8 Pro |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
感谢反馈,后续会修复。
临时解决方案:替换附件文件到 HBuilderX根目录/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-app-vite/dist/nvue/plugins/,然后重新编译。
HBuilderX 3.99.2023121601-alpha 已修复。
在 uni-app 更新到 3.98 版本后,如果你在 manifest.json
中设置了 "target": "esnext"
,并且在编译 nvue 页面时遇到 [plugin:uni:app-nvue-esbuild] exports is not defined
的错误,这通常是因为 esnext
目标与 nvue 的编译环境不兼容。
解决方案
-
检查
manifest.json
配置: 确保你的manifest.json
文件中没有错误地设置了"target": "esnext"
。对于 nvue 页面,建议使用默认的"target": "es5"
。{ "app-plus": { "nvueCompiler": "uni-app", "target": "es5" // 确保 target 设置为 es5 } }
-
修改
manifest.json
配置: 如果你确实需要使用esnext
,可以尝试将target
设置为es5
,或者移除target
配置,让 uni-app 使用默认的编译目标。{ "app-plus": { "nvueCompiler": "uni-app", "target": "es5" // 修改为 es5 或移除 target 配置 } }
-
检查代码中的模块化语法: 如果你在代码中使用了
import
/export
等 ES6+ 的模块化语法,确保这些语法在 nvue 页面中是兼容的。nvue 页面可能不支持某些高级的 ES6+ 特性。 -
更新 uni-app 和相关依赖: 确保你的 uni-app 和相关依赖(如
[@dcloudio](/user/dcloudio)/uni-app
、[@dcloudio](/user/dcloudio)/uni-cli-shared
等)是最新版本。有时,更新到最新版本可以解决一些兼容性问题。npm update [@dcloudio](/user/dcloudio)/uni-app [@dcloudio](/user/dcloudio)/uni-cli-shared
-
使用
nvue
页面的兼容模式: 如果你仍然遇到问题,可以尝试使用nvue
页面的兼容模式,确保代码在 nvue 环境中能够正常运行。{ "app-plus": { "nvueCompiler": "weex" // 使用 weex 编译器 } }