v2.1.0: use `vite-electron-plugin` instead `vite-plugin-electron`

This commit is contained in:
草鞋没号 2022-10-03 10:43:13 +08:00
parent b2a073cc8d
commit 1754306625
9 changed files with 63 additions and 70 deletions

1
.gitignore vendored
View File

@ -26,3 +26,4 @@ release
package-lock.json package-lock.json
pnpm-lock.yaml pnpm-lock.yaml
yarn.lock yarn.lock
dist-electron

3
.vscode/launch.json vendored
View File

@ -33,7 +33,8 @@
"--remote-debugging-port=9229", "--remote-debugging-port=9229",
"." "."
], ],
"envFile": "${workspaceFolder}/.vscode/.debug.env" "envFile": "${workspaceFolder}/.vscode/.debug.env",
"console": "integratedTerminal"
}, },
{ {
"name": "Debug Renderer Process", "name": "Debug Renderer Process",

4
.vscode/tasks.json vendored
View File

@ -12,6 +12,7 @@
"owner": "typescript", "owner": "typescript",
"fileLocation": "relative", "fileLocation": "relative",
"pattern": { "pattern": {
// TODO: correct "regexp"
"regexp": "^([a-zA-Z]\\:\/?([\\w\\-]\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$", "regexp": "^([a-zA-Z]\\:\/?([\\w\\-]\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$",
"file": 1, "file": 1,
"line": 3, "line": 3,
@ -21,8 +22,7 @@
}, },
"background": { "background": {
"activeOnStart": true, "activeOnStart": true,
"beginsPattern": "^.*building for development.*$", "endsPattern": "^.*[startup] Electron App.*$",
"endsPattern": "built in [0-9]*ms.*$",
} }
} }
} }

View File

@ -10,7 +10,10 @@
output: "release/${version}", output: "release/${version}",
buildResources: "electron/resources", buildResources: "electron/resources",
}, },
files: ["dist"], files: [
"dist-electron",
"dist"
],
win: { win: {
target: [ target: [
{ {

View File

@ -1,22 +1,9 @@
/// <reference types="vite-plugin-electron/electron-env" /> /// <reference types="vite-electron-plugin/electron-env" />
declare namespace NodeJS { declare namespace NodeJS {
interface ProcessEnv { interface ProcessEnv {
/** VSCODE_DEBUG?: 'true'
* The built directory structure DIST_ELECTRON: string
*
* ```tree
* dist
* electron
* main
* index.js
* preload
* index.js
* index.html
* ...other-static-files-from-public
*
* ```
*/
DIST: string DIST: string
/** /dist/ or /public/ */ /** /dist/ or /public/ */
PUBLIC: string PUBLIC: string

View File

@ -1,17 +1,16 @@
// The built directory structure // The built directory structure
// //
// ├─┬ dist-electron
// │ ├─┬ main
// │ │ └── index.js > Electron-Main
// │ └─┬ preload
// │ └── index.js > Preload-Scripts
// ├─┬ dist // ├─┬ dist
// │ ├─┬ electron // │ └── index.html > Electron-Renderer
// │ │ ├─┬ main //
// │ │ │ └── index.js process.env.DIST_ELECTRON = join(__dirname, '..')
// │ │ └─┬ preload process.env.DIST = join(process.env.DIST_ELECTRON, '../dist')
// │ │ └── index.js process.env.PUBLIC = app.isPackaged ? process.env.DIST : join(process.env.DIST_ELECTRON, '../public')
// │ ├── index.html
// │ ├── ...other-static-files-from-public
// │
process.env.DIST = join(__dirname, '../..')
process.env.PUBLIC = app.isPackaged ? process.env.DIST : join(process.env.DIST, '../public')
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
import { app, BrowserWindow, shell, ipcMain } from 'electron' import { app, BrowserWindow, shell, ipcMain } from 'electron'
import { release } from 'os' import { release } from 'os'

View File

@ -2,11 +2,11 @@
"name": "electron-vite-react", "name": "electron-vite-react",
"productName": "Electron", "productName": "Electron",
"private": true, "private": true,
"version": "2.0.0", "version": "2.1.0",
"description": "Vite React Electron boilerplate.", "description": "Vite React Electron boilerplate.",
"author": "草鞋没号 <308487730@qq.com>", "author": "草鞋没号 <308487730@qq.com>",
"license": "MIT", "license": "MIT",
"main": "dist/electron/main/index.js", "main": "dist-electron/main/index.js",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "tsc && vite build && electron-builder" "build": "tsc && vite build && electron-builder"
@ -26,12 +26,10 @@
"sass": "^1.54.4", "sass": "^1.54.4",
"typescript": "^4.7.4", "typescript": "^4.7.4",
"vite": "^3.0.7", "vite": "^3.0.7",
"vite-plugin-electron": "^0.9.2" "vite-electron-plugin": "^0.4.1"
}, },
"debug": { "debug": {
"env": { "env": {
"VITE_DEV_SERVER_HOSTNAME": "127.0.0.1",
"VITE_DEV_SERVER_PORT": 7777,
"VITE_DEV_SERVER_URL": "http://127.0.0.1:7777" "VITE_DEV_SERVER_URL": "http://127.0.0.1:7777"
} }
} }

View File

@ -1,9 +1,17 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client'
import App from './App' import App from './App'
// import './samples/node-api'
import 'styles/index.css' import 'styles/index.css'
/**
* If you enables use of Node.js API in the Renderer-process
* ```
* npm i -D vite-plugin-electron-renderer
* ```
* @see - https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#electron-renderervite-serve
*/
// import './samples/node-api'
ReactDOM.createRoot(document.getElementById('root')!).render( ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode> <React.StrictMode>
<App /> <App />

View File

@ -2,10 +2,11 @@ import { rmSync } from 'fs'
import path from 'path' import path from 'path'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react' import react from '@vitejs/plugin-react'
import electron, { onstart } from 'vite-plugin-electron' import electron from 'vite-electron-plugin'
import { customStart } from 'vite-electron-plugin/plugin'
import pkg from './package.json' import pkg from './package.json'
rmSync(path.join(__dirname, 'dist'), { recursive: true, force: true }) // v14.14.0 rmSync(path.join(__dirname, 'dist-electron'), { recursive: true, force: true })
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
@ -18,38 +19,33 @@ export default defineConfig({
plugins: [ plugins: [
react(), react(),
electron({ electron({
main: { include: [
entry: 'electron/main/index.ts', 'electron',
vite: { 'preload',
build: { ],
// For Debug transformOptions: {
sourcemap: true, sourcemap: !!process.env.VSCODE_DEBUG,
outDir: 'dist/electron/main',
},
// Will start Electron via VSCode Debug
plugins: [process.env.VSCODE_DEBUG ? onstart() : null],
},
}, },
preload: { // Will start Electron via VSCode Debug
input: { plugins: process.env.VSCODE_DEBUG
// You can configure multiple preload scripts here ? [customStart(debounce(() => console.log(/* For `.vscode/.debug.script.mjs` */'[startup] Electron App')))]
index: path.join(__dirname, 'electron/preload/index.ts'), : undefined,
},
vite: {
build: {
// For Debug
sourcemap: 'inline',
outDir: 'dist/electron/preload',
}
},
},
// Enables use of Node.js API in the Electron-Renderer
// https://github.com/electron-vite/vite-plugin-electron/tree/main/packages/electron-renderer#electron-renderervite-serve
renderer: {},
}), }),
], ],
server: process.env.VSCODE_DEBUG ? { server: process.env.VSCODE_DEBUG ? (() => {
host: pkg.debug.env.VITE_DEV_SERVER_HOSTNAME, const url = new URL(pkg.debug.env.VITE_DEV_SERVER_URL)
port: pkg.debug.env.VITE_DEV_SERVER_PORT, return {
} : undefined, host: url.hostname,
port: +url.port,
}
})() : undefined,
clearScreen: false,
}) })
function debounce<Fn extends (...args: any[]) => void>(fn: Fn, delay = 299) {
let t: NodeJS.Timeout
return ((...args) => {
clearTimeout(t)
t = setTimeout(() => fn(...args), delay)
}) as Fn
}