electron-vite-react/packages/renderer/vite.config.ts

124 lines
2.9 KiB
TypeScript
Raw Normal View History

2022-01-29 22:12:54 +08:00
import { join } from 'path'
import { builtinModules } from 'module'
import { defineConfig, Plugin } from 'vite'
import react from '@vitejs/plugin-react'
import optimizer from 'vite-plugin-optimizer'
2022-04-18 09:56:00 +08:00
import resolve from 'vite-plugin-resolve'
2022-01-29 22:12:54 +08:00
import pkg from '../../package.json'
/**
* @see https://vitejs.dev/config/
*/
2022-01-29 22:12:54 +08:00
export default defineConfig({
mode: process.env.NODE_ENV,
root: __dirname,
plugins: [
react(),
2022-04-18 09:56:00 +08:00
electron(),
resolve({
2022-02-08 11:25:06 +08:00
/**
2022-04-18 09:56:00 +08:00
* Here you resolve some CommonJs module.
* Or some Node.js native modules they may not be built correctly by vite.
* At the same time, these modules should be put in `dependencies`,
* because they will not be built by vite, but will be packaged into `app.asar` by electron-builder
2022-02-08 11:25:06 +08:00
*/
2022-04-18 09:56:00 +08:00
'electron-store': 'export default require("electron-store");',
// Node.js native module
serialport: `
const { SerialPort } = require("serialport");
export { SerialPort }
`,
}),
2022-01-29 22:12:54 +08:00
],
base: './',
build: {
outDir: '../../dist/renderer',
2022-04-15 08:04:54 +08:00
emptyOutDir: true,
sourcemap: true,
2022-01-29 22:12:54 +08:00
},
resolve: {
alias: {
'@': join(__dirname, 'src'),
},
},
server: {
2022-03-14 15:24:36 +08:00
host: pkg.env.VITE_DEV_SERVER_HOST,
port: pkg.env.VITE_DEV_SERVER_PORT,
2022-01-29 22:12:54 +08:00
},
})
/**
* For usage of Electron and NodeJS APIs in the Renderer process
* @see https://github.com/caoxiemeihao/electron-vue-vite/issues/52
*/
2022-04-18 09:56:00 +08:00
export function electron(
entries: Parameters<typeof optimizer>[0] = {}
): Plugin {
const builtins = builtinModules.filter((t) => !t.startsWith('_'))
2022-01-29 22:12:54 +08:00
/**
* @see https://github.com/caoxiemeihao/vite-plugins/tree/main/packages/resolve#readme
*/
return optimizer({
2022-01-31 09:30:04 +08:00
electron: electronExport(),
...builtinModulesExport(builtins),
...entries,
2022-01-31 09:30:04 +08:00
})
2022-01-29 22:12:54 +08:00
function electronExport() {
return `
2022-02-08 11:25:06 +08:00
/**
* For all exported modules see https://www.electronjs.org/docs/latest/api/clipboard -> Renderer Process Modules
*/
const electron = require("electron");
const {
clipboard,
nativeImage,
shell,
contextBridge,
crashReporter,
ipcRenderer,
webFrame,
desktopCapturer,
deprecate,
} = electron;
2022-02-08 11:25:06 +08:00
export {
electron as default,
clipboard,
nativeImage,
shell,
contextBridge,
crashReporter,
ipcRenderer,
webFrame,
desktopCapturer,
deprecate,
}
`
2022-01-29 22:12:54 +08:00
}
function builtinModulesExport(modules: string[]) {
return modules
.map((moduleId) => {
const nodeModule = require(moduleId)
const requireModule = `const M = require("${moduleId}");`
const exportDefault = `export default M;`
const exportMembers =
Object.keys(nodeModule)
.map((attr) => `export const ${attr} = M.${attr}`)
.join(';\n') + ';'
const nodeModuleCode = `
2022-02-08 11:25:06 +08:00
${requireModule}
2022-01-29 22:12:54 +08:00
2022-02-08 11:25:06 +08:00
${exportDefault}
2022-01-29 22:12:54 +08:00
2022-02-08 11:25:06 +08:00
${exportMembers}
`
2022-01-29 22:12:54 +08:00
return { [moduleId]: nodeModuleCode }
})
.reduce((memo, item) => Object.assign(memo, item), {})
2022-01-29 22:12:54 +08:00
}
}