- Updated the Electron Vite configuration to dynamically exclude production dependencies, improving build performance and compatibility. - Modified the output format in the Rollup options to CommonJS, ensuring compatibility with bundled dependencies. - Adjusted the main entry point in package.json to reflect the new output format. - Enhanced the README to clarify notification triggers for system notifications. This commit optimizes the build configuration and improves documentation clarity, facilitating better dependency management and user understanding.
100 lines
2.7 KiB
TypeScript
100 lines
2.7 KiB
TypeScript
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
|
|
import react from '@vitejs/plugin-react'
|
|
import { readFileSync } from 'fs'
|
|
import { resolve } from 'path'
|
|
import type { Plugin } from 'vite'
|
|
|
|
// Read all production dependencies from package.json
|
|
// so they get bundled into the main process output.
|
|
// This avoids pnpm symlink issues with electron-builder's asar packaging.
|
|
const pkg = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf-8'))
|
|
const prodDeps = Object.keys(pkg.dependencies || {})
|
|
|
|
// Rollup plugin: stub out native .node addon imports with empty modules.
|
|
// ssh2 and cpu-features use optional native bindings that can't be bundled,
|
|
// but they have pure JS fallbacks when the native module isn't available.
|
|
function nativeModuleStub(): Plugin {
|
|
const STUB_ID = '\0native-stub'
|
|
return {
|
|
name: 'native-module-stub',
|
|
resolveId(source) {
|
|
if (source.endsWith('.node')) return STUB_ID
|
|
return null
|
|
},
|
|
load(id) {
|
|
if (id === STUB_ID) return 'export default {}'
|
|
return null
|
|
}
|
|
}
|
|
}
|
|
|
|
export default defineConfig({
|
|
main: {
|
|
plugins: [
|
|
externalizeDepsPlugin({
|
|
exclude: prodDeps
|
|
}),
|
|
nativeModuleStub()
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
'@main': resolve(__dirname, 'src/main'),
|
|
'@shared': resolve(__dirname, 'src/shared'),
|
|
'@preload': resolve(__dirname, 'src/preload')
|
|
}
|
|
},
|
|
build: {
|
|
outDir: 'dist-electron/main',
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'src/main/index.ts')
|
|
},
|
|
output: {
|
|
// CJS format so bundled deps can use __dirname/require.
|
|
// Use .cjs extension since package.json has "type": "module".
|
|
format: 'cjs',
|
|
entryFileNames: '[name].cjs'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
preload: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
resolve: {
|
|
alias: {
|
|
'@preload': resolve(__dirname, 'src/preload'),
|
|
'@shared': resolve(__dirname, 'src/shared'),
|
|
'@main': resolve(__dirname, 'src/main')
|
|
}
|
|
},
|
|
build: {
|
|
outDir: 'dist-electron/preload',
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'src/preload/index.ts')
|
|
},
|
|
output: {
|
|
format: 'cjs',
|
|
entryFileNames: '[name].js'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
renderer: {
|
|
resolve: {
|
|
alias: {
|
|
'@renderer': resolve(__dirname, 'src/renderer'),
|
|
'@shared': resolve(__dirname, 'src/shared'),
|
|
'@main': resolve(__dirname, 'src/main')
|
|
}
|
|
},
|
|
plugins: [react()],
|
|
build: {
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'src/renderer/index.html')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|