uniapp和import.meta.globEager一起用的坑

509 阅读1分钟

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文件引入并转化为对象,然后遍历这个对象,改个名字后导出

尝试解决

  • 在翻遍了全网后,我并没有发现跟我一样的错误,所以我做了以下尝试
    1. 重启微信开发者工具,重启HbuilderX
    2. 代码删除了重新拉下来,重装依赖,重新编译
    3. 重装微信开发者工具,重装HbuilderX
    4. 尝试全局搜索用了这个方法的地方改为手动import(由于使用地方太多,最后失败)
  • 最后在机缘巧合下,将使用的HbuilderX的版本从当前的4.15降级到4.08,编译一次成功

总结

  • 最后还是没找到报错原因,但满足当下开发要求就行了,我猜测可能是Hbuilder升级后变更了编译的某个地方导致的,希望以后出现同样问题的朋友可以通过这个文章解决你的问题
  • 附上下载地址:历史版本 - HBuilderX 文档 (dcloud.net.cn)