You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.7 KiB
150 lines
4.7 KiB
/**
|
|
* @file Vite Configuration for Electron Platform
|
|
* @author Matthew Raymer
|
|
*
|
|
* This configuration file sets up Vite for building the TimeSafari application
|
|
* for the Electron desktop platform. It extends the common configuration with
|
|
* electron-specific settings and optimizations.
|
|
*
|
|
* Key Features:
|
|
* - Electron-specific platform detection
|
|
* - Desktop-optimized build settings
|
|
* - Capacitor-Electron plugin integration
|
|
* - Native module support
|
|
* - Desktop-specific asset handling
|
|
*
|
|
* Usage:
|
|
* ```bash
|
|
* vite build --config vite.config.electron.mts
|
|
* ```
|
|
*
|
|
* Environment Variables:
|
|
* - VITE_PLATFORM: Set to "electron"
|
|
* - PWA: Disabled for desktop (via build exclusion)
|
|
*/
|
|
|
|
import { defineConfig } from "vite";
|
|
import { createBuildConfig } from "./vite.config.common.mts";
|
|
|
|
export default defineConfig(async () => {
|
|
const baseConfig = await createBuildConfig("electron");
|
|
|
|
return {
|
|
...baseConfig,
|
|
|
|
plugins: [
|
|
...baseConfig.plugins || [],
|
|
// Plugin to replace the main entry point for electron builds
|
|
{
|
|
name: 'electron-entry-point',
|
|
transformIndexHtml(html) {
|
|
return html.replace(
|
|
'/src/main.web.ts',
|
|
'/src/main.electron.ts'
|
|
);
|
|
}
|
|
},
|
|
// Plugin to handle Electron-specific configurations
|
|
{
|
|
name: 'electron-config',
|
|
config(config) {
|
|
// Suppress console warnings about missing source maps for external deps
|
|
if (config.build && config.build.rollupOptions) {
|
|
config.build.rollupOptions.onwarn = (warning, warn) => {
|
|
// Suppress warnings about missing source maps for external modules
|
|
if (warning.code === 'MISSING_GLOBAL_NAME' ||
|
|
warning.message?.includes('sourcemap') ||
|
|
warning.message?.includes('@capacitor-community/sqlite')) {
|
|
return;
|
|
}
|
|
warn(warning);
|
|
};
|
|
}
|
|
}
|
|
},
|
|
// Plugin to suppress source map loading for external modules
|
|
{
|
|
name: 'suppress-source-maps',
|
|
transformIndexHtml(html) {
|
|
// Add script to suppress source map loading errors
|
|
const script = `
|
|
<script>
|
|
// Suppress source map loading errors for external modules
|
|
const originalFetch = window.fetch;
|
|
window.fetch = function(url, options) {
|
|
if (typeof url === 'string' && url.includes('.map')) {
|
|
console.log('[Source Map] Suppressed loading of:', url);
|
|
return Promise.resolve(new Response('', { status: 404 }));
|
|
}
|
|
return originalFetch(url, options);
|
|
};
|
|
</script>
|
|
`;
|
|
return html.replace('</head>', script + '</head>');
|
|
}
|
|
}
|
|
],
|
|
|
|
// Electron-specific entry point
|
|
build: {
|
|
...baseConfig.build,
|
|
outDir: "dist",
|
|
// Disable source maps for Electron to prevent DevTools warnings
|
|
sourcemap: false,
|
|
// Use the electron-specific main entry point
|
|
rollupOptions: {
|
|
...baseConfig.build?.rollupOptions,
|
|
// Electron-specific externals
|
|
external: [
|
|
"electron",
|
|
"@capacitor-community/electron",
|
|
"better-sqlite3-multiple-ciphers"
|
|
],
|
|
output: {
|
|
...baseConfig.build?.rollupOptions?.output,
|
|
// Desktop can handle larger chunks
|
|
manualChunks: {
|
|
vendor: ["vue", "vue-router", "@vueuse/core"],
|
|
crypto: ["@nostr/tools", "crypto-js"],
|
|
ui: ["@fortawesome/vue-fontawesome"]
|
|
}
|
|
}
|
|
},
|
|
// Electron doesn't need ES module compatibility
|
|
target: "node16",
|
|
// Optimize for desktop performance
|
|
chunkSizeWarningLimit: 2000
|
|
},
|
|
|
|
// Electron-specific optimizations
|
|
optimizeDeps: {
|
|
...baseConfig.optimizeDeps,
|
|
// Include electron-specific dependencies
|
|
include: [
|
|
...(baseConfig.optimizeDeps?.include || []),
|
|
"@capacitor-community/electron"
|
|
],
|
|
// Exclude native modules that Electron will handle
|
|
exclude: [
|
|
...(baseConfig.optimizeDeps?.exclude || []),
|
|
"better-sqlite3-multiple-ciphers",
|
|
"electron"
|
|
]
|
|
},
|
|
|
|
// Electron doesn't need dev server configuration
|
|
server: undefined,
|
|
|
|
// Desktop-specific environment
|
|
define: {
|
|
...baseConfig.define,
|
|
'process.env.VITE_PLATFORM': JSON.stringify('electron'),
|
|
|
|
|
|
// Electron-specific flags
|
|
'__ELECTRON__': JSON.stringify(true),
|
|
'__IS_DESKTOP__': JSON.stringify(true),
|
|
'__USE_NATIVE_SQLITE__': JSON.stringify(true)
|
|
}
|
|
};
|
|
});
|