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.
- β
π‘οΈ 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 } 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() ] };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 |
| 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
