vite-plugin-bundle-obfuscator

JavaScript obfuscator plugin for Vite environments
695,938 327
Install
npm install vite-plugin-bundle-obfuscator
Latest Version:1.13.2
License:MIT
Last Updated:Sep 20, 2026
Links: GitHub  ·  npm
Maintainer: bigchui

vite-plugin-bundle-obfuscator

适用于Vite环境的JavaScript混淆器插件

awesome-vite npm version npm downloads GitHub Release Date codecov GitHub License

📝 更新日志 · 🐛 报告问题 · ✨ 请求功能

⭐️ 特性

  • ✅ ⚡ 支持Vite项目中的JavaScript混淆。
  • ✅ 🚀 多线程支持,以获得更好的性能。
  • ✅ ⚙️ 可定制的混淆器选项,以满足您的需求。
  • ✅ 🔐 可选支持 JavaScript Obfuscator Pro API。
  • ✅ 🛡️ 自动排除node_modules。
  • ✅ 📦 支持node_modules拆分块。

⚠️ 注意

  • 如果遇到内存溢出,修改打包命令为"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build", max-old-space-size的值根据配置自行设置。
  • 在设置node_modules分包时,请把准确的包名前置。例如:["vue-router", "vue"],"vue"可以同时匹配到vue以及vue-router。

🌐 在线试用

✦ Vite - Vanilla ✦ Vite - Vue ✦ Vite - React ✦ Vite - PReact ✦ Vite - lit ✦ Vite - Svelte ✦ Vite - Solid ✦ Vite - Qwik ✦ ...

📦 安装

# 使用npm
npm install vite-plugin-bundle-obfuscator -D

# 使用pnpm
pnpm add vite-plugin-bundle-obfuscator -D

# 使用yarn
yarn add vite-plugin-bundle-obfuscator -D

👨‍💻 使用

  1. 使用您首选的软件包管理器安装插件。
  2. 在vite.config.js中注册插件。
  3. 自定义混淆器配置或使用默认选项。

示例:

import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';

// 全部配置
const allObfuscatorConfig = {
  excludes: [],
  enable: true,
  log: true,
  autoExcludeNodeModules: false,
  // autoExcludeNodeModules: { enable: true, manualChunks: ['vue'] }
  threadPool: false,
  // 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)
  ]
};

// 简化配置
const minimizeObfuscatorConfig = {
  autoExcludeNodeModules: true,
  // autoExcludeNodeModules: { enable: true, manualChunks: ['vue'] }
  threadPool: true,
  // threadPool: { enable: true, size: 4 }
};

export default {
  plugins: [
    vitePluginBundleObfuscator(minimizeObfuscatorConfig)
  ]
};

// 默认配置
export default {
  plugins: [
    vitePluginBundleObfuscator()
  ]
};

🔐 JavaScript Obfuscator Pro API

Pro API 默认关闭。只有需要 javascript-obfuscator Pro 功能,例如 vmObfuscation 或 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 只用于配置 Pro API 调用。所有混淆参数,包括 vmObfuscation、vmBytecodeFormat、optionsPreset、parseHtml 等 Pro 混淆参数,都继续写在 options 中。

🧵 Web Worker 支持

默认不会对 ?worker / new Worker(new URL(...)) 生成的 worker bundle 进行混淆。

启用 worker 混淆:

import vitePluginBundleObfuscator from 'vite-plugin-bundle-obfuscator';

export default {
  plugins: [
    vitePluginBundleObfuscator({
      obfuscateWorker: true,
    }),
  ],
};

仅对 worker 额外排除某些文件:

vitePluginBundleObfuscator({
  obfuscateWorkerExcludes: [/comlink\\.worker.*\\.js$/],
});

🚀 性能比较

拥有 7000+ modules 和 400+ bundles 在 4C 8G 机器上:

  • ThreadPool Enabled : 🟩🟩🟩⬜⬜⬜⬜⬜⬜ (大约30秒)
  • ThreadPool Disabled : 🟥🟥🟥🟥🟥🟥🟥🟥🟥 (大约90秒)

🛠️ 选项

属性 描述 类型 默认值 版本
threadPool 线程池的配置。 boolean | ({ enable: true; size: number } | { enable: false }) false v1.2.0
apply 仅将插件应用于服务或构建,或在特定条件下。 'serve' | 'build' | ((this: void, config: UserConfig, env: ConfigEnv) => boolean) build v1.1.0
autoExcludeNodeModules 启用自动排除node_modules。 boolean | ({ enable: true; manualChunks: string[] } | { enable: false }) false v1.0.9(原本为boolean,在v1.3.0版本中扩展到当前类型)
obfuscateWorker 启用或禁用 Web Worker 产物混淆。 boolean | { enable: boolean } false v1.10.0
obfuscateWorkerExcludes 仅对 worker 额外排除(最终:excludes + obfuscateWorkerExcludes)。 (RegExp | string)[] [] v1.10.0
pro JavaScript Obfuscator Pro API 配置。 false | { enable: boolean; apiToken?: string; version?: string; timeout?: number; onProgress?: (message: string, fileName: string) => void } false -
log 显示或隐藏日志输出。 boolean true v1.0.4
enable 启用或禁用混淆器。 boolean true v1.0.1
excludes 排除的bundle名。从v1.0.8开始,支持正则。 (RegExp | string)[] [] v1.0.0
options JavaScript混淆器的选项。 ObfuscatorOptions defaultObfuscatorConfig v1.0.0

📄 License

MIT License Copyright (c) 2024-present, Zoffy

Related Packages

@afterpack/nuxt

Nuxt 3 module for AfterPack: obfuscate a Nuxt app's production JavaScript during...

1,460 2
unplugin-vue-prop

Add import define props type support for Vue3 script-setup and lang is typescrip...

1,105 2
@storybook-vue/nuxt

Storybook addon for Nuxt and Vite

2,665,088 490
@nuxtjs/storybook

Storybook module for Nuxt

2,341,848 489
vite-doctor

Small Vite Doctor CLI for project diagnostics.

67,821 21

Version History

Version Released License
1.13.2 MIT
1.13.1 MIT
1.13.0 MIT
1.12.0 MIT
1.11.0 MIT