ArcherGu/fast-vite-electron

主进程如何使用import.meta.glob来批量导入controller文件夹下所有的文件呢

MrChildrenHY opened this issue · 4 comments

之前用webpack的时候,就是用require.context批量导入,
现在换成大佬的这个vite版本,应该如何一次性导入所有的controller文件呢,不想新建一个加一个

这个模板的渲染进程是完全和 vite 做前端一样的,所以可以考虑用 vite 的 glob-import

但是主进程只是利用 vite 启动了一下(包括开发模式和生产模式),因为我的理念里是这两个东西不应该完全混合,所以主进程的开发/构建都是用独立的 esbuild 来做的(不是 vite 里的那个根据 vite 配置过的 esbuild ),因此,vite 的东西是不能在主进程用的,比如 import.meta

如果你想在主进程做到上述的操作,建议找一下 esbuild 有没有类似的插件,或者自己写一个这种插件。

/// <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)

懂了,非常感谢。。