0.8.3 ā€¢ Published 5 months ago

vite-electron-plugin v0.8.3

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

vite-electron-plugin

High-performance, esbuild-based Vite Electron plugin

NPM version NPM Downloads

  • šŸš€ High-performance (Not Bundle, based on esbuild)
  • šŸŽÆ Support Plugin (Like Vite's plugin)
  • šŸŒ± What you see is what you get
  • šŸ”„ Hot restart

Quick Setup

  1. Add dependency to project
npm i -D vite-electron-plugin
  1. Add vite-electron-plugin into vite.config.ts
import electron from 'vite-electron-plugin'

export default {
  plugins: [
    electron({
      include: [
        // The Electron source codes directory
        'electron',
      ],
    }),
  ],
}
  1. Create electron/main.ts and type the following code
import { app, BrowserWindow } from 'electron'

app.whenReady().then(() => {
  const win = new BrowserWindow()

  if (process.env.VITE_DEV_SERVER_URL) {
    win.loadURL(process.env.VITE_DEV_SERVER_URL)
  } else {
    win.loadFile('dist/index.html')
  }
})
  1. Add entry into package.json
{
+ "main": "dist-electron/main.js"
}

Examples

Recommend Structure

Let's use the official template-vanilla-ts 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

Conventions

  • Any file ending with reload.ext (e.g. foo.reload.js, preload.ts) after an update,
    will trigger a reload of the Electron-Renderer process, instead of an entire Electron App restart.
    Which is useful when updating Preload-Scripts.

Configuration

electron(config: Configuration)

Plugin API

The design of plugin is similar to Vite's plugin. But simpler, only 4 hooks in total.

configResolved

  • Type: (config: ResolvedConfig) => void | Promise<void>
  • Kind: async, sequential

You can freely modify the config argument in ths hooks or use.

onwatch serve only

  • Type: (envet: 'add' | 'change' | 'addDir' | 'unlink' | 'unlinkDir', path: string) => void
  • Kind: async, parallel

Triggered by include file changes. You can emit some files in this hooks. Even restart the Electron App.

transform

  • Type: (args: { filename: string, code: string, done: () => void }) => string | import('esbuild').TransformResult | void | Promise<string | import('esbuild').TransformResult | void>
  • Kind: async, sequential

Triggered by changes in extensions files in include.

ondone

  • Type: (args: { filename: string, distname: string }) => void
  • Kind: async, parallel

Triggered when transform() ends or a file in extensions is removed.

Builtin Plugin

import path from 'node:path'
import electron from 'vite-electron-plugin'
import {
  alias,
  copy,
  dest,
  esmodule,
  customStart,
  loadViteEnv,
} from 'vite-electron-plugin/plugin'

export default {
  plugins: [
    electron({
      plugins: [
        alias([
          // `replacement` is recommented to use absolute path, 
          // it will be automatically calculated as relative path.
          { find: '@', replacement: path.join(__dirname, 'src') },
        ]),

        copy([
          // filename, glob
          { from: 'foo/*.ext', to: 'dest' },
        ]),

        // Dynamic change the build dist path.
        dest((_from, to) => to?.replace('dist-electron', 'dist-other')),

        customStart(({ startup }) => {
          // If you want to control the launch of Electron App yourself.
          startup()
        }),

        // Support use ESM npm-package in Electron-Main.  
        esmodule({
          // e.g. `execa`, `node-fetch`, `got`, etc.
          include: ['execa', 'node-fetch', 'got'],
        }),

        // https://vitejs.dev/guide/env-and-mode.html#env-files
        // Support use `import.meta.env.VITE_SOME_KEY` in Electron-Main
        loadViteEnv(),
      ],
    }),
  ],
}

JavaScript API

import {
  type Configuration,
  type ResolvedConfig,
  type Plugin,
  build,
  watch,
  startup,
  defineConfig,
  default as electron,
} from 'vite-electron-plugin'

Example

// dev
watch({
  include: [
    // The Electron source codes directory
    'electron',
  ],
  plugins: [
    {
      name: 'plugin-electron-startup',
      ondone() {
        // Startup Electron App
        startup()
      },
    },
  ],
})

// build
build({
  include: ['electron'],
})
0.8.3

5 months ago

0.8.1

1 year ago

0.8.0

1 year ago

0.7.4

1 year ago

0.8.2

1 year ago

0.7.2

1 year ago

0.6.3

1 year ago

0.4.5

2 years ago

0.7.1

1 year ago

0.6.2

1 year ago

0.4.7

2 years ago

0.7.3

1 year ago

0.6.4

1 year ago

0.4.6

2 years ago

0.5.0

2 years ago

0.7.0

1 year ago

0.6.1

1 year ago

0.5.2

1 year ago

0.6.0

1 year ago

0.5.1

2 years ago

0.4.4

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.3.3

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.3.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago