插件自动导入的方式。
require.context()
该方式是JS原生支持。
function vue_require(vue: any) {
const SELF_FILENAME = './manager.ts';
const modules = require.context('./', false, /.ts$/);
const files = modules.keys();
files.forEach((filename: string) => {
if (filename === SELF_FILENAME) {
return;
}
vue.use(modules(filename).default);
});
}
glob()
该方式需要依赖glob
库,适用于NodeJS。
import glob from 'glob';
export default <T> (app: T) => {
glob("src/plugins/**/*.ts", (err: Error | null, matches: string[]) => {
console.log(err, matches)
matches.forEach(it => {
if (it.indexOf("PluginManager.ts") > 0) return
import(it.replace("src/plugins/", "./")).then(mod => mod.default && mod.default(app));
})
})
}
import.meta.glob()
该方式仅在vite框架下才可行,底层应该也是使用的glob插件。
function vite_import(vue: Vue) {
const modules = import.meta.glob("./*.ts");
for (const path in modules) {
if (import.meta.env.DEV) {
// 方法一:通过path导入
// @vite-ignore
import(path as string).then((mod: any) => {
vue.use(mod.default);
});
} else {
// 方法二:modules是一个Map,通过key可以得到对应的模块
modules[path]().then(module => {
// console.log(`module[${path}]`, module);
vue.use(module.default);
});
}
}
}