主进程如何使用import.meta.glob来批量导入controller文件夹下所有的文件呢
MrChildrenHY opened this issue · 4 comments
MrChildrenHY commented
之前用webpack的时候,就是用require.context批量导入,
现在换成大佬的这个vite版本,应该如何一次性导入所有的controller文件呢,不想新建一个加一个
ArcherGu commented
这个模板的渲染进程是完全和 vite 做前端一样的,所以可以考虑用 vite 的 glob-import。
但是主进程只是利用 vite 启动了一下(包括开发模式和生产模式),因为我的理念里是这两个东西不应该完全混合,所以主进程的开发/构建都是用独立的 esbuild 来做的(不是 vite 里的那个根据 vite 配置过的 esbuild ),因此,vite 的东西是不能在主进程用的,比如 import.meta
。
如果你想在主进程做到上述的操作,建议找一下 esbuild 有没有类似的插件,或者自己写一个这种插件。
ArcherGu commented
ArcherGu commented
/// <reference types="vitest" />
import { join } from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { VitePluginDoubleshot } from 'vite-plugin-doubleshot'
import ImportGlobPlugin from 'esbuild-plugin-import-glob'
// https://vitejs.dev/config/
export default defineConfig({
root: join(__dirname, 'src/render'),
plugins: [
vue(),
VitePluginDoubleshot({
type: 'electron',
main: 'dist/main/index.js',
entry: 'src/main/index.ts',
outDir: 'dist/main',
external: ['electron'],
tsupConfig: {
esbuildPlugins: [
ImportGlobPlugin() as any, // <- 放入插件
],
},
electron: {
build: {
config: './electron-builder.config.js',
},
preload: {
entry: 'src/preload/index.ts',
outDir: 'dist/preload',
},
},
}),
],
resolve: {
alias: {
'@render': join(__dirname, 'src/render'),
'@main': join(__dirname, 'src/main'),
'@common': join(__dirname, 'src/common'),
},
},
base: './',
build: {
outDir: join(__dirname, 'dist/render'),
emptyOutDir: true,
},
test: { // e2e tests
include: ['./tests/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
testTimeout: 30_000,
hookTimeout: 30_000,
},
})
我测试了一下,这个插件用是可以用的,就是有点瑕疵,比如你要专门建立一个文件夹,把需要一次性导入的文件都放在里面:
新建一个 ”controllers“ 的文件夹,把 *.controller.ts
文件都放进去。
// @ts-ignore
import controllersArr from './controllers/*';
console.log(controllersArr)
MrChildrenHY commented
懂了,非常感谢。。