uniapp和import.meta.globEager一起用的坑
着急的直接看最后如何解决即可
起因
- 在最近维护的项目中,通过uniapp运行一个小程序的开发环境,在编译时一直报错
TypeError: (void 0) is not a function - 通过查找文件,发现是某个功能的接口封装入口文件使用了如下代码
const files = import.meta.globEager('./*.js');
let api = {};
Object.keys(files).forEach((key) => {
api = {
...api,
[key.replace(/(.*\/)*([^.]+).*/gi, '$2')]: files[key].default,
};
});
export default api;
- 可以明确的看到,该代码的作用是通过
import.meta.globEager将当前目录下所有.js文件引入并转化为对象,然后遍历这个对象,改个名字后导出
尝试解决
- 在翻遍了全网后,我并没有发现跟我一样的错误,所以我做了以下尝试
- 重启微信开发者工具,重启HbuilderX
- 代码删除了重新拉下来,重装依赖,重新编译
- 重装微信开发者工具,重装HbuilderX
- 尝试全局搜索用了这个方法的地方改为手动
import(由于使用地方太多,最后失败)
- 最后在机缘巧合下,将使用的HbuilderX的版本从当前的4.15降级到4.08,编译一次成功
总结
- 最后还是没找到报错原因,但满足当下开发要求就行了,我猜测可能是Hbuilder升级后变更了编译的某个地方导致的,希望以后出现同样问题的朋友可以通过这个文章解决你的问题
- 附上下载地址:历史版本 - HBuilderX 文档 (dcloud.net.cn)