Specialized plugins for Electron development including bytecode compilation for source protection, automatic dependency externalization, and SWC transformer support for TypeScript decorators.
Compile JavaScript to V8 bytecode for source code protection in production builds.
/**
* Compile to v8 bytecode to protect source code
* @param options - Bytecode compilation options
* @returns Vite plugin or null if not in production
*/
function bytecodePlugin(options?: BytecodeOptions): Plugin | null;
interface BytecodeOptions {
/** Chunk names to compile to bytecode, empty array compiles all chunks */
chunkAlias?: string | string[];
/** Transform arrow functions to regular functions for compatibility */
transformArrowFunctions?: boolean;
/** Remove original JS bundle files after compilation */
removeBundleJS?: boolean;
/** Strings to protect by converting to String.fromCharCode calls */
protectedStrings?: string[];
}Usage Examples:
import { defineConfig } from "electron-vite";
import { bytecodePlugin } from "electron-vite";
export default defineConfig({
main: {
plugins: [
bytecodePlugin({
chunkAlias: ['main'], // Only compile main chunk
transformArrowFunctions: true,
removeBundleJS: true,
protectedStrings: ['secretKey', 'apiToken']
})
]
}
});Automatically externalize dependencies to reduce bundle size and improve build performance.
/**
* Automatically externalize dependencies
* @param options - Externalization options
* @returns Vite plugin or null if no dependencies found
*/
function externalizeDepsPlugin(options?: ExternalOptions): Plugin | null;
interface ExternalOptions {
/** Dependencies to exclude from externalization */
exclude?: string[];
/** Additional dependencies to include in externalization */
include?: string[];
}Usage Examples:
import { defineConfig } from "electron-vite";
import { externalizeDepsPlugin } from "electron-vite";
export default defineConfig({
main: {
plugins: [
externalizeDepsPlugin({
exclude: ['lodash'], // Keep lodash bundled
include: ['custom-native-module'] // Externalize custom module
})
]
},
preload: {
plugins: [
externalizeDepsPlugin() // Externalize all dependencies
]
}
});Use SWC transformer for fast TypeScript compilation with decorator support.
/**
* Use SWC to support for emitting type metadata for decorators
* When using swcPlugin, you need to install @swc/core
* @param options - SWC transformation options
* @returns Vite plugin
*/
function swcPlugin(options?: SwcOptions): Plugin;
interface SwcOptions {
/** Files to include in transformation */
include?: FilterPattern;
/** Files to exclude from transformation */
exclude?: FilterPattern;
/** SWC transformation configuration */
transformOptions?: TransformConfig;
}
// From Vite
type FilterPattern = string | RegExp | (string | RegExp)[] | null;
// From @swc/core
interface TransformConfig {
jsc?: JscConfig;
module?: ModuleConfig;
isModule?: boolean;
}
interface JscConfig {
parser?: ParserConfig;
transform?: TransformConfig;
target?: string;
keepClassNames?: boolean;
minify?: boolean;
}Usage Examples:
import { defineConfig } from "electron-vite";
import { swcPlugin } from "electron-vite";
export default defineConfig({
main: {
plugins: [
swcPlugin({
include: /\.(m?ts|[jt]sx)$/,
exclude: /\.js$/,
transformOptions: {
jsc: {
parser: {
syntax: 'typescript',
decorators: true
},
transform: {
legacyDecorator: true,
decoratorMetadata: true
},
target: 'es2022'
}
}
})
]
}
});Source Protection:
Compatibility:
Usage Restrictions:
Automatic Detection:
Bundle Optimization:
Flexible Configuration:
Performance:
Decorator Support:
Configuration:
Recommended plugin order for optimal results:
export default defineConfig({
main: {
plugins: [
// External dependencies first
externalizeDepsPlugin(),
// SWC transformation
swcPlugin(),
// Bytecode compilation last (post-build)
bytecodePlugin()
]
}
});Configure plugins based on environment:
export default defineConfig(({ command, mode }) => {
const plugins = [externalizeDepsPlugin()];
if (mode === 'production') {
plugins.push(bytecodePlugin());
}
if (mode === 'development') {
plugins.push(swcPlugin({ /* dev options */ }));
}
return {
main: { plugins }
};
});SWC Plugin Requirements:
npm install @swc/core --save-devBytecode Plugin Requirements:
Bytecode Plugin:
SWC Plugin:
Externalization Plugin:
Enable plugin debugging with environment variables:
# Debug plugin execution
DEBUG=vite:* electron-vite build
# SWC-specific debugging
SWC_DEBUG=1 electron-vite build