- 3061fc9 fix: avoid file descriptor 3 for IPC on Linux to prevent Chromium collision
Contributors:
- 638d0f3 feat: support main process control hot-reload
- c58fbf9 feat: mock index.html for support use the main process only
Hot Reload
Since v0.29.0, when preload scripts are rebuilt, they will send an electron-vite&type=hot-reload event to the main process.
If your App doesn't need a renderer process, this will give you hot-reload.
// electron/main.ts
process.on('message', (msg) => {
if (msg === 'electron-vite&type=hot-reload') {
for (const win of BrowserWindow.getAllWindows()) {
// Hot reload preload scripts
win.webContents.reload()
}
}
})- 3239718 fix: better exit app #251
- 927885d fix: unable to disable watch #252
- f043f74 chore: cleanup
- 149c4a9 Merge pull request #247 from think-flow/testfix
- f9bda13 fix: notBundle test is failed
- b3cf74c chore: cleanup, code format
- 957b144 Merge pull request #233 from kuoruan/feat/config
- c0f2647 feat: inherit more config from base user config
Contributors:
- be94383 fix:
ElectronOptions['startup']definition - 96905d9 chore: compatible vite@4 resolve node first
- a16fe3c fix: hot-reload compatible vite@4
- f325403 chore: update comments
- 5ebd3a6 Merge pull request #229 from ThatKawaiiSam/feat/custom-electron-fork
- dbc85dc feat: allow custom electron forks in
startupcall - 8b076be chore: update deprecated API
Contributors:
- 4f7748c chore: restore
vite-plugin-electron-rendererinpeerDependencies - 412ed9b fix(#214): catch the
process.kill(pid)error
- a300c08 fix: remove electron@28 version pre-deps
- 5b0fc87 feat: use
treeKillSync()insteadtree-kill
- efc5826 fix: correct
calcEntryCount()for startup - cf0e91f feat: startup support
SpawnOptions#194 - 512a1c5 Merge pull request #204 from SanGongHappy/tree-kill-sync
- edf4bf6 refactor: better
treeKillSyncimplemented - 82cd32f Merge branch 'electron-vite:main' into tree-kill-sync
- 6e122a7 feat: polyfill
process.envby default - 45f28bb (github/main, main) chore: update CHANGELOG
- f9b81e4 chore(simple): update comments
- b5376a9 docs: add
Built format - e334366 copy tree-kill
- 20170a5 refactor: preload built
formatuseesmby default
- No break changes. Just need to define
"type": "module"in package.json for supportsesm:) - By the way. Recommend using the
vite-plugin-electron/simpleAPI. It is simpler, and the main difference is its adaptation topreloadscripts. - electron@28 Preload scripts 👉 limitations.
In most cases, use cjs format
`require()` can usable matrix
@see - https://github.com/electron/electron/blob/v30.0.0-nightly.20240104/docs/tutorial/esm.md#preload-scripts
┏———————————————————————————————————┳——————————┳———————————┓
│ webPreferences: { } │ import │ require │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: false(undefined) │ ✘ │ ✔ │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: true │ ✔ │ ✔ │
┠———————————————————————————————————╂——————————╂———————————┨
│ sandbox: true(undefined) │ ✘ │ ✔ │
┠———————————————————————————————————╂——————————╂———————————┨
│ sandbox: false │ ✔ │ ✘ │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: false │ ✘ │ ✔ │
│ sandbox: true │ │ │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: false │ ✔ │ ✘ │
│ sandbox: false │ │ │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: true │ ✘ │ ✔ │
│ sandbox: true │ │ │
┠———————————————————————————————————╂——————————╂———————————┨
│ nodeIntegration: true │ ✔ │ ✔ │
│ sandbox: false │ │ │
┗———————————————————————————————————┸——————————┸———————————┛
- import(✘): SyntaxError: Cannot use import statement outside a module
- require(✘): ReferenceError: require is not defined in ES module scope, you can use import instead
This is just the default behavior, and you can modify them at any time through custom config in the vite.config.js
{ "type": "module" }
┏————————————————————┳——————————┳———————————┓
│ built │ format │ suffix │
┠————————————————————╂——————————╂———————————┨
│ main process │ esm │ .js │
┠————————————————————╂——————————╂———————————┨
│ preload scripts │ cjs │ .mjs │ diff
┠————————————————————╂——————————╂———————————┨
│ renderer process │ - │ .js │
┗————————————————————┸——————————┸———————————┛
{ "type": "commonjs" } - default
┏————————————————————┳——————————┳———————————┓
│ built │ format │ suffix │
┠————————————————————╂——————————╂———————————┨
│ main process │ cjs │ .js │
┠————————————————————╂——————————╂———————————┨
│ preload scripts │ cjs │ .js │ diff
┠————————————————————╂——————————╂———————————┨
│ renderer process │ - │ .js │
┗————————————————————┸——————————┸———————————┛
- d7c0a91 feat: preload built
formatadapt toesm
- f557a98 feat: supports
"type": "module", betteresmlogic
No break changes. Just need to define"type": "module"in package.json for supportsesm:)By the way. Recommend using thevite-plugin-electron/simpleAPI. It is simpler, and the main difference is its adaptation topreloadscripts.electron@28 Preload scripts 👉 limitations.
- 9ec82b5 feat: supports electron@28, build
esmby default - 5dd3ccd feat: bump deps to vite@5, electron@28 and others
- 39520cc feat: upgrade to vite@5
- 3340cfc chore: prevent encounter problem
Why
v0.28.0? This is consistent withelectron@28, meaning it is recommended to use electron@28+, which is the first version to supportesm.
🚨 deprecated
-
Updatemainofpackage.jsonforesm{ - "main": "dist-electron/main.js", + "main": "dist-electron/main.mjs", } -
If you still need to usecjs, you need to make some changesSimple APIimport electron from 'vite-plugin-electron/simple' export default { plugins: [ electron({ main: { - entry: 'electron/main.ts', + vite: { + build: { + lib: { + entry: 'electron/main.ts', + formats: ['cjs'], + fileName: () => '[name].js', + }, + }, + }, }, }), ], }Flat APIimport electron from 'vite-plugin-electron' export default { plugins: [ electron({ - entry: 'electron/main.ts', + vite: { + build: { + lib: { + entry: 'electron/main.ts', + formats: ['cjs'], + fileName: () => '[name].js', + }, + }, }, }), ], }
- f57a60a fix(#182, #187): correctly
options.reload() - f606551 Merge pull request #178 from electron-vite/v0.15.4
- 532e0b4 Merge pull request #177 from Siykt/main
- 845c39b fix: add SIGKILL to tree-kill call
Contributors:
- 20907ef chore: recover
v0.15.1
- 9719203 chore: better exit
electronlogic
- 2119108 fix: correct use
tree-kill
- 234be07 fix:
tree-killdoesn't work - 5e6c36d feat:
calcEntryCount() - bbd6bd1 Merge branch 'main' of github.com:electron-vite/vite-plugin-electron into main
- 9a910e5 Merge pull request #166 from CommandMC/fix/wait-for-all-files
- 3962718 fix: startup electron wait for all files built
- 7f75ae2 Merge branch 'fix/wait-for-all-files' of https://github.com/CommandMC/vite-plugin-electron into main
- 65b73c2 Merge pull request #122 from sevenc-nanashi/main
- e4033c3 Merge pull request #1 from caoxiemeihao/cleanup
- 8e70a39 chore: cleanup
- 20dd675 refactor: migrate examples to
github.com/caoxiemeihao/electron-vite-samples - de9259f Change: Use peer-dependency
- 8247192 Merge: main -> main
- ab990b9 Wait until the last file is done bundling before starting Electron
- 6e5a033 Merge pull request #163 from electron-vite/v0.14.1
Fixs:
electrondoes not exit correctly | 使用ctrl + c 停止代码,electron后台不关闭 #168, #122- Fixed
electronstartup timing #166
Contributors:
- ba14f55 feat(simple): Preload scripts code not split by default
- 3cc71ca feat(simple): build Preload scripts as
cjsby default
- d3cf87f feat: simple API build
- d8c3c27 feat: simple API 🥳
See 👉 Simple API
import electron from 'vite-plugin-electron/simple'
electron({
main: {},
preload: {},
renderer: {},
})- 37e14b0 fix: remove
apply: 'serve' - 4f196e3 fix: export bare
vite-plugin-electron/plugin - 06c91f3 docs: v0.13.0
The user decides when notBundle should be used. See 👉 Not Bundle
import electron from 'vite-plugin-electron'
import { notBundle } from 'vite-plugin-electron/plugin'
export default defineConfig(({ command }) => ({
plugins: [
electron({
entry: 'electron/main.ts',
vite: {
plugins: [command === 'serve' && notBundle(/* NotBundleOptions */)],
},
}),
],
}))- 86d9a34 chore: update pnpm lock
- c6aceb3 refactor: standalone
Not Bundleplugin - b3decf4 Merge pull request #150 from haodaking/changelog
- 3f77d12 Update CHANGELOG.md
Users need to import the notBundle plugin explicitly. See 👉 Not Bundle
import electron from 'vite-plugin-electron'
import { notBundle } from 'vite-plugin-electron/plugin'
export default {
plugins: [
electron({
entry: 'electron/main.ts',
vite: {
plugins: [notBundle(/* NotBundleOptions */)],
},
}),
],
}- e5403c1 feat: check
cjsavailabe
- 5fbcf40 test: plugin
external_node_modules - 9803e26 feat: non-bundle during dev 🚀
Let's use the electron-log as an examples.
┏—————————————————————————————————————┓
│ import log from 'electron-log' │
┗—————————————————————————————————————┛
↓
Modules in `node_modules` are not bundled during development, it's fast!
↓
┏—————————————————————————————————————┓
│ const log = require('electron-log') │
┗—————————————————————————————————————┛- 6822409 docs: v0.12.0
- 9ec9d3b v0.12.0
- 53a0dd8 feat: disable minify during dev
- 3925cd1 refactor: remove
defineConfig,Configuration->ElectronOptions, config.ts -> utils.ts
- b033bc5 v0.11.2
- 8190208 docs: typo
- 111d495 refactor(🔨): better build logic
- 76611a9 fix: disable
browserFieldby default #136 - 241534f feat: add
.npmrcforpnpm - 65d4ab1 chore: bump deps
- b4308e3 chore: rename
- 036e52c docs: update
- a222c48 examples: update quick-start
- d04155c examples: add javascript-api
- 9213ba0 docs: update
- 9b8da83 fix: cannot find type definition #126
- e864b81 examples: update multiple-window, add multiple-renderer
- 0a226b5 docs: update
- ff5e9dc feat: add logo.svg
- 7cec6ad examples: add multiple-windows
- f8528ed Merge pull request #123 from xhayper/patch-1
- 1e9f9b0 feat: remove extra dependencies
- 8fa6ce4 feat: update package and example
- 1d7eca5 feat: add test 🌱
- 9ef3e8e chore: bump deps
- 56446e2 chore: cleanup
- 2bf7d0b docs:
startup() - 401a44e refactor: cleanup
// 0.10.0
function build(config: Configuration | Configuration[]): Promise<void>
// 0.11.0 - Same as Vite's build
function build(config: Configuration): Promise<RollupOutput | RollupOutput[] | RollupWatcher>JavaScript API
vite-plugin-electron's JavaScript APIs are fully typed, and it's recommended to use TypeScript or enable JS type checking in VS Code to leverage the intellisense and validation.
Configuration- typedefineConfig- functionresolveViteConfig- function, Resolve the default Vite'sInlineConfigfor build Electron-MainwithExternalBuiltins- functionbuild- functionstartup- function
Example:
build(
withExternalBuiltins(
// external Node.js builtin modules
resolveViteConfig(
// with default config
{
entry: 'foo.ts',
vite: {
mode: 'foo-mode', // for .env file
plugins: [
{
name: 'plugin-build-done',
closeBundle() {
// Startup Electron App
startup()
},
},
],
},
},
),
),
)V8 Bytecode support 👉 bytecode
Inspired by:
- Support Vite4.x | #118, 28d38b6
- Bytecode example | df170c2
- JavaScript API docs | 3049169
- Fix load
.env| 758695d - Refactor
build()| d9c3343
- e4f943f refactor: move
build.resolvetoresolve - 91fb525 docs(zh-CN): update | @ggdream
- 41db615 Use mode from source config. | #105, #106
- 0b24909 refactor: cleanup, provides some programmable APIs 🌱
- 58517d8 refactor(proj-struct): remove
vite-plugin-electron-renderer - d2b3c29 Merge pull request #98 from skyrpex/patch-1
- 1645be2 fix: ignore the browser field when bundling
By default, the dist folder will be automatically removed by Vite. We build Electron related files into dist-electron to prevent it from being removed by mistake
- Remove Vite
3.2.0| #90 - ad9bb3c refactor(electron-renderer)!: remove
options.resolve(), use 'lib-esm' for resolve Node.js modules andelectron| vite-plugin-electron-renderer - b500039 feat(electron-renderer): support
optimizeDepsfor Electron-Renderer 🚀 - f28e66b faet(outDir)!:
dist/electron->dist-electron| vite-plugin-electron
- 59a24df fix(electron-renderer): use
createRequire()instead ofimport()🐞 - 11cd4c3 feat(electron):
onstartprovidesreload()
This is a redesigned version of the API(Only 3 APIs). Not compatible with previous versions!
export type Configuration = {
/**
* Shortcut of `build.lib.entry`
*/
entry?: import('vite').LibraryOptions['entry']
/**
* Triggered when Vite is built.
* If passed this parameter will not automatically start Electron App.
* You can start Electron App through the `startup` function passed through the callback function.
*/
onstart?: (
this: import('rollup').PluginContext,
startup: (args?: string[]) => Promise<void>,
) => void
vite?: import('vite').InlineConfig
}In the past few weeks, some issues have been mentioned in many issues that cannot be solved amicably. So I refactored the API to avoid design flaws. But despite this, the new version will only be easier rather than harder.
For example, some common problems in the following issues.
Thanks to Vite@3.2.0's lib.entry supports multiple entries, which makes the configuration of the new version very simple. So the vite-plugin-electron@0.10.0 requires Vite at least v3.2.0.
e.g.
import electron from 'vite-plugin-electron'
// In plugins option
electron({
entry: ['electron/entry-1.ts', 'electron/entry-2.ts'],
})
// Or use configuration array
electron([
{
entry: ['electron/entry-1.ts', 'electron/entry-2.ts'],
},
{
entry: 'foo/bar.ts',
},
])vite-plugin-electron-renderer will change output.format to cjs format by default(This is because currently Electron@21 only supports CommonJs), which will cause the built code to use require to import modules, if the user nodeIntegration is not enabled in the Electron-Main process which causes the error require is not defined to be thrown.
vite-plugin-electron-renderer@0.10.0 provides the nodeIntegration option. It is up to the user to decide whether to use Node.js(CommonJs).
e.g.
import renderer from 'vite-plugin-electron-renderer'
// In plugins option
renderer({
nodeIntegration: true,
})You can see 👉 examples/worker
-
Use Worker in Electron-Main
e.g. This looks the same as multiple entry
import electron from 'vite-plugin-electron' // In plugins option electron({ entry: ['electron/main.ts', 'electron/worker.ts'], }) // In electron/main.ts new Worker(path.join(__dirname, './worker.js'))
-
Use Worker in Electron-Renderer
e.g.
import renderer, { worker } from 'vite-plugin-electron-renderer' export default { plugins: [ renderer({ // If you need use Node.js in Electron-Renderer process nodeIntegration: true, }), ], worker: { plugins: [ worker({ // If you need use Node.js in Worker nodeIntegrationInWorker: true, }), ], }, }
- There is no way to differentiate between Preload-Scripts, which will cause the entire Electron App to restart after the preload update, not the Electron-Renderer reload.
vite-plugin-electron
vite-plugin-electron-renderer
- 191afb8 feat: proxy
ipcRendererinWorker| #69
vite-plugin-electron
- 715a1cd fix(electron):
VITE_DEV_SERVER_HOSTNAMEinsteadVITE_DEV_SERVER_HOST
vite-plugin-electron-renderer
vite-plugin-electron
- db61e49 feat(electron): support custom start 🌱 | #57, #58
vite-plugin-electron-renderer
🎉 v0.9.0 is a stable version based on vite@3.0.6
vite-plugin-electron
vite-plugin-electron-renderer
- ebc6a3d chore(electron-renderer): remove
renderBuiltUrl()based on vite@3.0.6 (vite@3.0.6-8f2065e)
sync vite-plugin-electron-renderer version
70a8c6e fix: electron-vite/electron-vite-vue#229
ESM -> CJS
PR: #51
-
feat: add
VITE_DEV_SERVER_URLto electron process env, so that it is easier to use -
fix(🐞): VITE_DEV_SERVER_HOSTNAME cannot be used directly when VITE_DEV_SERVER_HOSTNAME is a ipv6 address or vite config
server.hostis true -
fix(🐞): use vite config
modeas default build mode to avoid build mode not equal to vite configmodewhen vite configmode!== 'development' which would lead to render env not equal to electron main or preload -
fix(🐞): build electron output after render to avoid the electron output being deleted when the vite config emptyOutDir is
trueand the vite command isbuild -
fix(🐞): use
closeBundleto replacewriteBundle, because in extreme cases, an error will be reported. For example,can't find preload modulewill occur as an error whenpreloadupdate frequently
- 🌱 c8b59ba Support
envFileoptions electron-vite-vue/issues/209 - 🌱 2d7f033 Add
ImportMeta['env']declaration - 🌱 20d0a22 Must use
pnpm publishinstead ofnpm publish#43
- 9ee720f chore(electron): remove
envFile: false - 0016d52 fix(🐞):
normalizePath()
- 33b121a chore(deps): hoist
typescript - d3bd37a chore(electron): change import path
- 45f34d9 vite-plugin-electron@0.8.0
- daa1c52 docs:
vite-plugin-electron@0.8.0 - e4e7ee0 chore: fix link
- d1d4c82 chroe: bump deps
- 581ef71 chore(deps): bump vite to 3.0.2
- 481368a chore: remove unused def
- 71d54c1 chore(🐞): update import path
- 3bae8e5 refactor:
checkPkgMain.buildElectronMainPlugin() - dba119d chore: format code
- 739e659 feat: use
checkPkgMain() - 192a8ca refactor: standlone
checkPkgMainfunction - aaa9030 chore: explicitly specify external modules
- 3eac722 chore: remove TODO
- c03abe9 feat: add
checkPkgMain()plugin - d8c0f8e chore: rename param
- 04c94dd feat:
checkPkgMain() - 7b9631a deps: add
rollup - cec6db6 deps(🐞): add rollup for import
InputOption - a4de86e monorepo: move
vite-plugin-electrontopackages/electron
- 1ed6e19 chore: bump vite-plugin-electron-renderer to v0.5.7
- c60fb17 chore: update params
- 13f0c70 chore: bump vite-plugin-electron-renderer to 0.5.6
- 2033256 chore: bump deps
- 8fb064e fix(🐞): bump vite-plugin-electron-renderer to 0.5.3
- 44006b2 chore: comments
- 42acf37 docs: update
- 6d878f7 refactor: use
resolveModules() - acf1751 chore: bump deps
- 661a146 docs: v0.7.0
- 8ee091d feat: support restart on
vite.config.tschanged #24 - ca15795 add
electron-env.d.ts - 76863bb electron-env.d.ts
- 3fbef04 refactor: optimize code
- cc3c8c0 feat:
resolveBuildConfig() - 50c3afe feat:
resolveRuntime() - 1184dd3
node.js.ts->config.ts
- 5779397 chore: bump vite-plugin-electron-renderer to 0.5.1
- 2a2f77d docs:
Put Node.js packages in dependencies
- 5b736fa bump vite-plugin-electron-renderer to 0.5.0
- f70e030 fix(🐞): ensure always load into
buildConfig() - 73ae8f2 docs: update
- 5204eca docs: v0.6.0
- e885e54 feat:
withExternal() - dee6d6a feat:
CommonConfiguration - 55f9e11 node.js.ts
- 83d0b8d remove README.zh-CN.md
- 5f488b8 remove
polyfille-exports - e118fbd remove
renderer - 6e5761f refactor: integrate
vite-plugin-electron-renderer - 0e696ec add
vite-plugin-electron-renderer - 87bc5bb remove
vite-plugin-optimizer
- 0c5155c chore: TODO
- 892940e fix app,getName() return error name
- abf460f chore: variable rename
- ceb559f chore:
build.cssCodeSplit=false
- ab40088 fix(🐞): set
emptyOutDir=falsefor prevent accidental deletion of files - 7baafa0 break: set
electronbuild.outDirvalue isdist/electronby default - c13eb49 fix(🐞): assign default value
dist/electron/[process]ofbuild.outDir#10
- 1346707 refactor: better assign default
build.outDir - f489da1 chore: commnets
- 6db3bf3 fix: check
outputis Array
- 394cf6f feat:
config.build.emptyOutDir = falseby default - 4a67688 feat(🐞): enabled
polyfill-exportsby default