Awesome
<div align="center"> <img height="160" src="https://www.obfuscator.io/static/images/logo.png" alt="vite-plugin-bundle-obfuscator logo" />vite-plugin-bundle-obfuscator
JavaScript obfuscator
plugin for Vite
environments
Changelog · Report Bug · Request Feature
<p align="center"> <strong>English</strong> | <a href="./README.zh-CN.md">中文</a> </p> </div>⭐️ Features
- ✅ ⚡ Supports
JavaScript obfuscation
inVite
projects. - ✅ 🚀 Multi-threading support for better performfance.
- ✅ ⚙️ Customizable obfuscator options to fit your needs.
- ✅ 🛡️ Auto-excludes
node_modules
. - ✅ 📦 Support the
node_modules
split chunk.
⚠️ Notice
- If the obfuscation option
stringArray
istrue
.- Your results may lose some bundles (in
__vite__mapDeps
array). - I'm looking for an accurate case.
- Your results may lose some bundles (in
- 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-size
is set according to the configuration. - When setting up
node_modules
split 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.
🌐 Online
✦ Vite - Vanilla ✦ Vite - Vue ✦ Vite - React ✦ Vite - PReact ✦ Vite - lit ✦ Vite - Svelte ✦ Vite - Solid ✦ Vite - Qwik ✦ ...
📦 Installation
# 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
👨💻 Usage
- 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,
stringArray: false,
stringArrayCallsTransform: false,
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()
]
};
🚀 Performance Comparison
With 7000+ modules and 400+ bundles on a 4C 8G machine:
- ThreadPool Enabled : 🟩🟩🟩⬜⬜⬜⬜⬜⬜ (About 30 seconds)
- ThreadPool Disabled : 🟥🟥🟥🟥🟥🟥🟥🟥🟥 (About 90 seconds)
🛠️ Options
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) |
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 |
📄 License
MIT License Copyright (c) 2024-present, Zoffy