# @ismailnakkar/vite-obfuscator 中文文档

规范地址：https://npmcn.com/package/%40ismailnakkar/vite-obfuscator/

版本：5\.1\.0
npm 元数据更新时间：2026-11-01T11:05:49.765Z
中文译文更新时间：2026-11-01T12:18:27.989Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ismailnakkar/vite-obfuscator
原文对照：https://npmcn.com/package/%40ismailnakkar/vite-obfuscator/?lang=original
项目主页：https://github.com/ismailnakkar/vite-obfuscator
源码仓库：https://github.com/ismailnakkar/vite-obfuscator

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：33.1 kB，11 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：^20\.19\.0 \|\| \>=22\.12\.0
- 运行依赖：1 个
- peer 依赖：vite ^8\.0\.0，javascript-obfuscator ^5\.8\.1
- 首次发布：2026-09-20T13:16:29.388Z
- 最新版本发布：2026-11-01T11:05:49.603Z
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

Vite插件，它混淆了发货的JS岛，带有在静默损坏时构建失败的守卫。

## 安装

```sh
npm install @ismailnakkar/vite-obfuscator
```

也可以使用：`pnpm add @ismailnakkar/vite-obfuscator`、`yarn add @ismailnakkar/vite-obfuscator`、`bun add @ismailnakkar/vite-obfuscator`

## README

# @ismailnakkar / vite-obfuscator

一个插件，用于混淆所选条目的块 `javascript-obfuscator`,可以选择 通过其Pro VM运行标记的函数，并且在受保护的代码发布时构建失败 可读，否则VM标记将丢失或移动。

## 安装

```bash
npm i -D @ismailnakkar/vite-obfuscator
```

8 .和 `javascript-obfuscator` 5.8.1+是对等体。虚拟机需要进行模糊处理。io Pro API令牌。

## 使用

```js
import obfuscator from '@ismailnakkar/vite-obfuscator';
import {defineConfig} from 'vite';

export default defineConfig({
    plugins: [
        process.env.OBFUSCATE === 'true' && obfuscator({
            include: ['src/widget/index.js', 'src/widget/embed.js'],
            islandRoots: ['src/widget'],
            apiToken: process.env.OBFUSCATOR_API_TOKEN ?? '',
            vmObfuscation: true,
        }),
    ],
});
```

如上所述，将其闸门跳过；Vite忽略一个虚假的插件。

当一个块至少有一个条目到达它时，它就会被混淆 **每一个** 到达它的条目是in `include`． 一个 `islandRoots` 仅绑定到可读块中的模块在构建时失败。

当几个HTML页面加载相同的脚本时，Vite删除每个页面自己的块，以便页面匹配 没有条目。将该脚本添加到 `build.rolldownOptions.input` 和 `include`.

| 选项 | 默认的 |  |
| --- | --- | --- |
| `include` | 要求 | 写入的条目源路径 `vite.config`，不是条目名，不是 `./`． 作为整段后缀匹配的： `'app.js'` 每一个匹配 `app.js` 条目。 |
| `islandRoots` | 要求 | 要保护的代码目录，相对于Vite的目录 `root`. |
| `vmObfuscation` | `false` | 通过Pro虚拟机运行标记的功能。如果出现以下情况，则构建失败 `apiToken` 是空的。 |
| `apiToken` | `''` | Pro API令牌。忽略不 `vmObfuscation`. |
| `vmObfuscationThreshold` | `1` | VM。锁定在0-1。 |
| `timeout` | 上游的 | VM。Pro API请求超时（毫秒）。 |
| `version` | 最新的 | VM。Pro API运行的混淆器版本。 |
| `rehash` | `true` | 以其新字节的散列重命名每个混淆块。 `false` 用于在固定URL上提供的脚本。 |
| `maxGzipBytes` | `0` | 当被混淆的块压缩到超过此值的字节数时，构建失败。 `0` 是关闭的;每个块的原始大小和gzip大小都会被记录下来。 |
| `optionsPreset` | `'high-obfuscation'` | `javascript-obfuscator` 预设，在插件自己的设置下。 |
| `overrides` | `{}` | `javascript-obfuscator` 选项，最后合并。 |

`high-obfuscation` 打开 `debugProtection` （一个4000毫秒调试器循环）和 `disableConsoleOutput`. 用 `overrides: {debugProtection: false, disableConsoleOutput: false}`.

## VM标志

在函数上方的行上用法律注释标记一个函数：

```js
/*! javascript-obfuscator:vm */
export function detect() { … }
```

一个标记可以作为函数声明的前导 `const`/`let`/`var` 握着一个函数或箭头 函数、方法的导出、对象属性或包含一个方法的类字段。这些都是 插件接受的位置，而不是针对Pro VM验证的位置。有标记的模块可以 外 `islandRoots`.

插件集 `build.rolldownOptions.output.comments` 来 `{legal: true}` 所以标记存活了下来 缩小;以后的插件不能覆盖它。构建仍然可以移动一个标记：

-   **光交叉连接** （默认的minifier）在a上移动1 `const`/`let`/`var`；
-   **要简洁** 内联一个被调用一次的标记函数；
-   **利差**无论是否缩小，都可以内联一次性对象并移动其属性标记。

标记函数声明，oxc和Rolldown将其保留。用简洁，还是留记号 在 `const`/`let`/`var`,设置 `build.minify: false` 并减少插件没有的块 在你自己的插件中混淆。

当在源和块之间丢失标记时，构建失败，没有导致自己的功能，或者 标记在声明的地方导出函数(`export function f`， `export const f =`)那是 tree-shaken。未检测到：标记落在未标记的函数上，无论minifier是否移动了它 或者删除了标记的函数，但没有在声明的地方导出它。删除已标记的函数 停止使用。

## 构建失败

在写入任何内容之前，每次检查都会使构建失败，并显示一条指定原因的消息。两个 需要更多:

-   `… bundled but NOT obfuscated`：将导入条目添加到 `include`，或将模块移出 `islandRoots`.
-   `… is in an import cycle between obfuscated chunks`打破这个循环。

## 输出

进口商，每一次排放 `.html`，和 `build.manifest`， `build.ssrManifest` 和 `build.chunkImportMap` 文件被重写为重新命名的名称。混淆块的源映射为 加上一个警告：它 `sourcesContent` 将发送可读的代码。

该插件以后顺序运行 `generateBundle`，所以你自己的正常顺序是可读的 块。

轻快地清空 `outDir` 在此运行之前：with `emptyOutDir` 因此，就地构建不提供任何资产 在整个过程中（使用虚拟机的时间为几分钟），并在出现故障后将该目录清空。构建成 另一个目录并交换它，或者设置 `build.emptyOutDir: false` 自己修剪陈旧的资产。

## 测试

插件只运行在 `vite build`，所以应用测试不需要伪造或设置。这个包的套件： `npm test`.

## 升级

### 从4.倍

5.0忽略这些选项（TypeScript将它们报告为多余属性）；删除:

-   `enable`剩下的人 `enable: false` 现在混淆。将调用改为Gate(参见 [使用](https://npmcn.com/package/%40ismailnakkar/vite-obfuscator/#readme-use)）。
-   `vmTargetFunctionsMode`， `vmTargetFunctions`， `vmExcludeFunctions`：用 `/*! javascript-obfuscator:vm */`，现在是唯一的模式。 `overrides` 仍然到达上游的根 模式，无保护，并且只有带有标记的块到达虚拟机。
-   `mustContain`：按正常顺序检查chunk内容 `generateBundle` 你自己的。

## 常见问题

### @ismailnakkar/vite-obfuscator 是什么？

Vite插件，它混淆了发货的JS岛，带有在静默损坏时构建失败的守卫。

### 如何安装 @ismailnakkar/vite-obfuscator？

在项目目录运行 npm install @ismailnakkar/vite-obfuscator，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：vite（^8\.0\.0）、javascript-obfuscator（^5\.8\.1）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @ismailnakkar/vite-obfuscator 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @ismailnakkar/vite-obfuscator 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @ismailnakkar/vite-obfuscator 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js ^20\.19\.0 \|\| \>=22\.12\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @ismailnakkar/vite-obfuscator 可以商用吗？

@ismailnakkar/vite-obfuscator 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @ismailnakkar/vite-obfuscator 还在维护吗？

最新版本 5\.1\.0 发布于 2026/11/01（2 天前）；至今共发布 10 个版本，其中过去 12 个月发布了 10 个；首次发布于 2026/09/20。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

