vite-plugin-electron
Integrate Vite and Electron
English | 简体中文
Usage
Example 👉 vite-plugin-electron-quick-start
vite.config.ts
import electron from 'vite-plugin-electron'
export default {
plugins: [
electron({
main: {
entry: 'electron/main.ts',
},
}),
],
}
API
electron(config: Configuration)
import type { LibraryOptions, UserConfig } from 'vite'
import type { InputOption } from 'rollup'
export interface Configuration {
main: {
entry: LibraryOptions['entry']
vite?: UserConfig
}
preload?: {
input: InputOption
vite?: UserConfig
}
}
How to work
The plugin is just the encapsulation of the built-in scripts of electron-vite-boilerplate/scripts
Recommend structure
Let's use the vanilla-ts template created based on create vite
as an example
+ ├─┬ electron
+ │ └── main.ts
├─┬ src
│ ├── main.ts
│ ├── style.css
│ └── vite-env.d.ts
├── .gitignore
├── favicon.svg
├── index.html
├── package.json
├── tsconfig.json
+ └── vite.config.ts
🚨 By default, the files in electron
folder will be built into the dist/electron
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
vite-plugin-electron/renderer
Use Electron and Node.js API in Renderer-process
If you only need to build the Renderer-process, you can just use the vite-plugin-electron/renderer
plugin
Example 👉 electron-vite-boilerplate/packages/renderer/vite.config.ts
Usage
vite.config.ts
import renderer from 'vite-plugin-electron/renderer'
export default {
plugins: [
renderer(),
],
}
renderer.js
import { readFile } from 'fs'
import { ipcRenderer } from 'electron'
readFile()
ipcRenderer.on('event-name', () => {})
How to work
Using Electron API in Renderer-process
import { ipcRenderer } from 'electron'
↓
import { ipcRenderer } from 'vite-plugin-electron/renderer/modules/electron-renderer.js'
Using Node.js API in Renderer-process
import { readFile } from 'fs'
↓
import { readFile } from '.vite-plugin-electron-renderer/fs'
Config presets
- Fist, the plugin will configuration something.
If you do not configure the following options, the plugin will modify their default values
base = './'
build.assetsDir = ''
-> TODO: Automatic splicing build.assetsDir
build.emptyOutDir = false
build.cssCodeSplit = false
build.rollupOptions.output.format = 'cjs'
resolve.conditions = ['node']
- Always insert the
electron
module into optimizeDeps.exclude
-
The plugin transform Electron and Node.js built-in modules to ESModule format in vite serve
phase.
-
Add Electron and Node.js built-in modules to Rollup output.external
option in the vite build
phase.
FAQ
You may need to use some Node.js modules from npm in the Main-process/Renderer-process.
I suggest you look at electron-vite-boilerplate.