uni-app import.meta.globEager 导入目录文件,HBuilderX 4.15 编译小程序后提示 (void 0) not a function
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
我页遇到了
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
方法在编译过程中没有被正确识别或处理。globEager
是 uni-app
提供的一个特性,允许你在编译时静态地导入一个目录下的所有文件。以下是一些可能的解决方法和相关代码示例,帮助你定位和解决问题。
1. 确认 uni-app
和 HBuilderX
版本
首先,确保你使用的 uni-app
和 HBuilderX
版本支持 import.meta.globEager
。HBuilderX 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.js
或 pages.json
文件,确保没有配置错误导致 globEager
无法正常工作。特别是小程序的编译配置,需要确保支持这种动态导入的方式。
4. 清理缓存和重建
有时候,编译器的缓存可能会导致一些奇怪的问题。尝试清理 HBuilderX
的缓存和重建项目。
5. 查看控制台和日志
详细查看编译过程中的控制台输出和日志,看是否有更具体的错误信息或警告,这可能会提供更多关于问题的线索。
6. 示例代码完整性
确保你的代码文件中没有其他语法错误或未解决的依赖问题,这些都可能影响编译过程。
如果以上步骤都不能解决问题,建议查看 uni-app
的官方文档或社区论坛,看看是否有其他开发者遇到并解决了类似的问题。此外,也可以考虑向 uni-app
的官方支持团队报告这个问题,提供详细的错误信息和代码示例,以便他们能更好地帮助你解决问题。