uni-app vue3版本app中vite编译器使用import.meta.glob报错,不能正常使用
uni-app vue3版本app中vite编译器使用import.meta.glob报错,不能正常使用
测试过的手机
所有测试手机
示例代码:
let index = import.meta.glob('../index/*.vue');
for (let i in index) {
console.log(i)
};
操作步骤:
- vue3 vite编译器app编译结果即复现
预期结果:
- vue3 vite编译器下app与h5均可使用import.meta.glob
实际结果:
- vue3 vite编译器下app 使用报错,不能正常使用。
- vue3 vite编译器下h5 使用正常。
bug描述:
vue3版本app中vite编译器使用import.meta.glob报错不能正常使用。然而在vue3版本H5中vite编译器使用import.meta.glob正常使用。 vite官方文档中是支持的,https://cn.vitejs.dev/guide/features.html#glob-import
附件
更多关于uni-app vue3版本app中vite编译器使用import.meta.glob报错,不能正常使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
非 H5 端不支持动态导入,后续会考虑实现的可能性。
更多关于uni-app vue3版本app中vite编译器使用import.meta.glob报错,不能正常使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
请问现在能使用import.meta.glob了吗
h5能用,小程序还是无法动态导入文件
快25年了支持了吗
现在还是不行
回复 qq1438343098: 不能放在函数里,你必须放到顶层
必须这样。。不能放到函数里。。如果是选项式必须放到import这一级,不能在函数里调用这个方法。。你可以把导入进来之后的作为参数传,函数里面你不能调用,可以先这样把这个问题解决了
在uni-app的Vue3版本中,import.meta.glob 在App端无法正常使用,这是因为App平台与H5平台的编译环境存在差异。import.meta.glob 是Vite提供的原生功能,依赖于现代构建工具(如Vite)的静态分析能力,但uni-app在App端编译时,代码会经过原生渲染引擎处理,环境与浏览器不同,导致该API不被支持。
具体来说:
- H5平台:直接基于Vite构建,
import.meta.glob可以正常工作,因为它完全运行在浏览器环境中。 - App平台:代码会被编译到原生环境(如iOS/Android),
import.meta这类浏览器/构建时特有的API在原生环境中未定义,因此会报错(如图片中的import.meta is undefined)。
解决方案:
在uni-app中,App端应使用条件编译来区分平台,避免直接使用 import.meta.glob。对于动态导入需求,可以改用以下方式:
- 使用
uni.requireNativePlugin或动态import():在App端通过条件编译调用原生模块或ES模块的动态导入。 - 手动管理模块路径:通过静态配置文件路径列表,结合
import()实现动态加载。 - 降级到Vue2编译器:如果项目允许,Vue2版本在App端支持更稳定,但会失去Vue3特性。
示例代码(条件编译):
// #ifdef H5
let modules = import.meta.glob('../index/*.vue');
for (let path in modules) {
console.log(path);
}
// #endif
// #ifdef APP-PLUS
// App端改用其他方式,例如静态导入或动态import()
const moduleList = [
'../index/page1.vue',
'../index/page2.vue'
];
moduleList.forEach(path => {
import(path).then(module => {
console.log(module);
});
});
// #endif



