uni-app import.meta.globEager 导入目录文件,HBuilderX 4.15 编译小程序后提示 (void 0) not a function

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app import.meta.globEager 导入目录文件,HBuilderX 4.15 编译小程序后提示 (void 0) not a function

项目信息 详情
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows 11 Pro 23H2
HBuilderX类型 正式
HBuilderX版本号 4.15
第三方开发者工具版本号 1.06.2405282
基础库版本号 3.4.3
项目创建方式 HBuilderX

操作步骤:

import { createPinia } from 'pinia'  
import piniaPersist from 'pinia-plugin-persist-uni'  

// 自动注入所有pinia模块  
const files = import.meta.globEager('./*.js')  
const modules = {}  
Object.keys(files).forEach((key) => {  
    modules[key.replace(/(.*\/)*([^.]+).*/gi, '$2')] = files[key].default  
})  

export const setupPinia = (app) => {  
    const pinia = createPinia()  
    pinia.use(piniaPersist)  
    app.use(pinia)  
}  

export default (name) => {  
    return modules[name]()  
}  

预期结果:

"use strict";  
const peach_store_app = require("./app.js");  
const peach_store_modal = require("./modal.js");  
const peach_store_sys = require("./sys.js");  
const peach_store_user = require("./user.js");  
const common_vendor = require("../../common/vendor.js");  
const files = /* @__PURE__ */ Object.assign({ "./app.js": peach_store_app.__vite_glob_0_0, "./modal.js": peach_store_modal.__vite_glob_0_1, "./sys.js": peach_store_sys.__vite_glob_0_2, "./user.js": peach_store_user.__vite_glob_0_3 });  
const modules = {};  
Object.keys(files).forEach((key) => {  
  modules[key.replace(/(.*\/)*([^.]+).*/gi, "$2")] = files[key].default;  
});  
const setupPinia = (app) => {  
  const pinia = common_vendor.createPinia();  
  pinia.use(common_vendor.index$1);  
  app.use(pinia);  
};  
const $store = (name) => {  
  return modules[name]();  
};  
exports.$store = $store;  
exports.setupPinia = setupPinia;

实际结果:

"use strict";  
const common_vendor = require("../../common/vendor.js");  
const files = (void 0)("./*.js");  
const modules = {};  
Object.keys(files).forEach((key) => {  
  modules[key.replace(/(.*\/)*([^.]+).*/gi, "$2")] = files[key].default;  
});  
const setupPinia = (app) => {  
  const pinia = common_vendor.createPinia();  
  pinia.use(common_vendor.index$1);  
  app.use(pinia);  
};  
const $store = (name) => {  
  return modules[name]();  
};  
exports.$store = $store;  
exports.setupPinia = setupPinia;

bug描述:

使用 import.meta.globEager 导入当前目录下的 .js 文件
HBuilderX 4.08 正常编译微信小程序,代码正常运行,转译结果为下面预期结果内容

HBuilderX 4.15 编译微信小程序后,代码如下面实际结果所示,提示 void 0 not a function


7 回复

import { isFunction } from ‘@vue/shared’ import { App } from ‘vue’ const modules = import.meta.globEager(’./modules/*/.ts’)
export default { install: (app: App) => { for (const module of Object.values(modules)) { const fun = module.default isFunction(fun) && fun(app) } } }

我的也报错、

手机端报这个 23:43:45.693 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: (void 0) is not a function at (app-service.js:96161:27) at (app-service.js:96267:3)

试试这个import.meta.glob(’./modules/*/.ts’,{eager: true})

这个试过,改是没解决问题, 现在,我在是不是,我的vite版本过搞的问题,导致,退回到4,看看,能不能用 hbx4.3.6

在处理 uni-app 中的 import.meta.globEager 功能时,如果遇到编译小程序后提示 (void 0) not a function 的错误,这通常意味着 globEager 方法在编译过程中没有被正确识别或处理。globEageruni-app 提供的一个特性,允许你在编译时静态地导入一个目录下的所有文件。以下是一些可能的解决方法和相关代码示例,帮助你定位和解决问题。

1. 确认 uni-appHBuilderX 版本

首先,确保你使用的 uni-appHBuilderX 版本支持 import.meta.globEagerHBuilderX 4.15 应该支持这一特性,但最好确认一下 uni-app 的版本是否也是最新的。

2. 使用正确的语法

确保你使用 import.meta.globEager 的语法是正确的。下面是一个基本的示例:

const modules = import.meta.globEager('./pages/**/*.vue');
for (const path in modules) {
  console.log(path, modules[path].default);
}

在这个例子中,globEager 导入了 ./pages/ 目录下的所有 .vue 文件,并将它们存储在一个对象中,你可以通过路径来访问这些模块。

3. 检查编译配置

检查你的 vue.config.jspages.json 文件,确保没有配置错误导致 globEager 无法正常工作。特别是小程序的编译配置,需要确保支持这种动态导入的方式。

4. 清理缓存和重建

有时候,编译器的缓存可能会导致一些奇怪的问题。尝试清理 HBuilderX 的缓存和重建项目。

5. 查看控制台和日志

详细查看编译过程中的控制台输出和日志,看是否有更具体的错误信息或警告,这可能会提供更多关于问题的线索。

6. 示例代码完整性

确保你的代码文件中没有其他语法错误或未解决的依赖问题,这些都可能影响编译过程。

如果以上步骤都不能解决问题,建议查看 uni-app 的官方文档或社区论坛,看看是否有其他开发者遇到并解决了类似的问题。此外,也可以考虑向 uni-app 的官方支持团队报告这个问题,提供详细的错误信息和代码示例,以便他们能更好地帮助你解决问题。

回到顶部