JavaScript obfuscator plugin for Vite environments
π Changelog Β· π Report Bug Β· β¨ Request Feature
English | δΈζ
- β
β‘ Supports
JavaScript obfuscationinViteprojects. - β π Multi-threading support for better performance.
- β βοΈ Customizable obfuscator options to fit your needs.
- β π Optional JavaScript Obfuscator Pro API support.
- β
π‘οΈ Auto-excludes
node_modules. - β
π¦ Support the
node_modulessplit chunk.
- If a memory overflow occurs, modify the packaging command to
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build", wheremax-old-space-sizeis set according to the configuration. - When setting up
node_modulessplit chunk, please place the accurate package name at the front. For example: ["vue-router", "vue"], "vue" can match both "vue" and "vue-router" at the same time.
β¦ Vite - Vanilla β¦ Vite - Vue β¦ Vite - React β¦ Vite - PReact β¦ Vite - lit β¦ Vite - Svelte β¦ Vite - Solid β¦ Vite - Qwik β¦ ...
# Using npm
npm install vite-plugin-bundle-obfuscator -D
# Using pnpm
pnpm add vite-plugin-bundle-obfuscator -D
# Using yarn
yarn add vite-plugin-bundle-obfuscator -D- Install the plugin using your preferred package manager.
- Register the plugin in
vite.config.js - Customize the obfuscator configuration or use the default options.
Example:
import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';
// All configurations
const allObfuscatorConfig = {
excludes: [],
enable: true,
log: true,
autoExcludeNodeModules: true,
// autoExcludeNodeModules: { enable: true, manualChunks: ['vue'] }
threadPool: true,
// threadPool: { enable: true, size: 4 }
pro: false,
options: {
compact: true,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1,
deadCodeInjection: false,
debugProtection: false,
debugProtectionInterval: 0,
disableConsoleOutput: false,
identifierNamesGenerator: 'hexadecimal',
log: false,
numbersToExpressions: false,
renameGlobals: false,
selfDefending: true,
simplify: true,
splitStrings: false,
ignoreImports: true,
stringArray: true,
stringArrayCallsTransform: true,
stringArrayCallsTransformThreshold: 0.5,
stringArrayEncoding: [],
stringArrayIndexShift: true,
stringArrayRotate: true,
stringArrayShuffle: true,
stringArrayWrappersCount: 1,
stringArrayWrappersChainedCalls: true,
stringArrayWrappersParametersMaxCount: 2,
stringArrayWrappersType: 'variable',
stringArrayThreshold: 0.75,
unicodeEscapeSequence: false,
}
};
export default {
plugins: [
vitePluginBundleObfuscator(allObfuscatorConfig)
]
};
// Simplified configurations
const minimizeObfuscatorConfig = {
autoExcludeNodeModules: true,
// autoExcludeNodeModules: { enable: true, manualChunks: ['vue'] }
threadPool: true,
// threadPool: { enable: true, size: 4 }
};
export default {
plugins: [
vitePluginBundleObfuscator(minimizeObfuscatorConfig)
]
};
// Default configurations
export default {
plugins: [
vitePluginBundleObfuscator()
]
};Pro API support is disabled by default. Enable it only when you need javascript-obfuscator Pro features such as vmObfuscation or parseHtml.
import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';
export default {
plugins: [
vitePluginBundleObfuscator({
pro: {
enable: true,
apiToken: process.env.JAVASCRIPT_OBFUSCATOR_PRO_API_TOKEN,
version: '5.0.3',
timeout: 300000,
},
options: {
vmObfuscation: true,
vmBytecodeFormat: 'binary',
compact: true,
},
}),
],
};pro only configures the Pro API call. All obfuscation options, including Pro options such as vmObfuscation, vmBytecodeFormat, optionsPreset, and parseHtml, should stay in options.
By default, worker bundles generated from ?worker / new Worker(new URL(...)) are not obfuscated.
Enable worker obfuscation:
import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';
export default {
plugins: [
vitePluginBundleObfuscator({
obfuscateWorker: true,
}),
],
};Exclude extra files only for workers:
vitePluginBundleObfuscator({
obfuscateWorkerExcludes: [/comlink\\.worker.*\\.js$/],
});With 7000+ modules and 400+ bundles on a 4C 8G machine:
- ThreadPool Enabled : π©π©π©β¬β¬β¬β¬β¬β¬ (About 30 seconds)
- ThreadPool Disabled : π₯π₯π₯π₯π₯π₯π₯π₯π₯ (About 90 seconds)
| Property Name | Description | Type | Default | Version |
|---|---|---|---|---|
| threadPool | Configuration for the thread pool. | boolean | ({ enable: true; size: number } | { enable: false }) | false | v1.2.0 |
| apply | Apply the plugin only for serve or build, or on certain conditions. | 'serve' | 'build' | ((this: void, config: UserConfig, env: ConfigEnv) => boolean) | build | v1.1.0 |
| autoExcludeNodeModules | Enable auto exclude node_modules. | boolean | ({ enable: true; manualChunks: string[] } | { enable: false }) | false | v1.0.9 (originally boolean, extended to current type in v1.3.0) |
| obfuscateWorker | Enable or disable obfuscation for Web Worker bundles. | boolean | { enable: boolean } | false | v1.10.0 |
| obfuscateWorkerExcludes | Additional excludes only for workers (final: excludes + obfuscateWorkerExcludes). |
(RegExp | string)[] | [] | v1.10.0 |
| pro | JavaScript Obfuscator Pro API configuration. | false | { enable: boolean; apiToken?: string; version?: string; timeout?: number; onProgress?: (message: string, fileName: string) => void } | false | - |
| log | Show or hide log output. | boolean | true | v1.0.4 |
| enable | Enable or disable the obfuscator. | boolean | true | v1.0.1 |
| excludes | Bundle names to be excluded. Starting from v1.0.8, RegExp is supported. | (RegExp | string)[] | [] | v1.0.0 |
| options | Options for the JavaScript obfuscator. | ObfuscatorOptions | defaultObfuscatorConfig | v1.0.0 |
MIT License Copyright (c) 2024-present, Zoffy
