部署模式:在本地或云端运行引擎

运行引擎的两种方式:在你自己的机器上本地运行,或者凭 Pro 密钥在 AfterPack 的云端运行。

部署模式改变的是工作在哪里进行,以及哪些东西会接触到你的源代码。它不会改变变换本身的作用:无论引擎在哪里运行,同样的输入和同样的设置都会产生同样的保护。AfterPack 有两种运行模式。

模式 1:本地(Free)

npx afterpack@latest <path> 在你的机器上原生运行 AfterPack,未配置 key 的每个框架插件也是如此。**你的源代码从不离开你的文件系统。**安装、构建,就这样。不需要账户,不需要密钥,混淆本身也不需要任何网络往返。

这是默认路径,几乎每一次构建都应该走这条路径。

有两项仅限 Pro 的设置在这里表现不同:加固标志 transforms.selfIntegrity.enabled 和 transforms.comparisonHardening.enabled 不会被应用,而会提高保护强度的按区域 @afterpack 指令会让构建停止。参见 Pro。

一次与混淆无关的网络调用

发出 error 或 critical 级别诊断的构建会上报匿名的构建诊断信息:代码、严重级别、版本、分桶计数,从不包含源代码。干净的构建不会发送任何内容。用 AFTERPACK_telemetry_enabled=false 或插件选项中的 telemetry.enabled 关闭它。详情见隐私与数据处理。

模式 2:AfterPack 云端(Pro)

同一个包,再加上一个 key。它是一个普通的配置键,和其他每个键一样可以通过三种方式设置:命令行上的 --key=ap_v1_…、环境变量中的 AFTERPACK_key=ap_v1_…,或者 afterpack.json 中的 "key"。命令行标志优先于环境变量,环境变量优先于文件;完整的优先级规则见配置。

密钥应该放在环境变量里,而不是命令行上

--key= 用于一次性的本地运行。命令行会留在 shell 历史、CI 日志和 ps 输出中,所以任何共享场景都请使用 AFTERPACK_key。没有登录步骤,也没有单独的凭据:控制台中的密钥就是全部。

当 key 被解析出来时,引擎会把你的文件打成批次并调用 POST /v1/obfuscate/batch。云端运行 Pro 版本的引擎,并在每个文件处理完成后以流的形式返回混淆后的输出;你的构建在每个结果到达时将其写入。源代码只在内存中处理,不会被持久化。只有一项产物会被存储:为控制台提供数据的逐构建 Protection Map,你可以按项目关闭它。完整的通信契约见 Cloud API 参考。

**云端不可用时失败即中止。**如果无法连接到云端(DNS 失败、连接被拒绝、针对 5xx 的重试次数耗尽,或请求超时),构建会失败,而不是降级为免费层级的输出。诊断定义了这条规则及其背后的退出码。

客户端会按 1 s / 4 s / 16 s 的间隔重试 503/504(共四次尝试),并在放弃前严格遵循 429 的 Retry-After 重试一次。其他所有状态都不可重试,会以构建失败的形式呈现,并附带 API 自身的诊断代码。

如何选择

情形模式
默认:零摩擦,没有任何东西离开你的机器模式 1(本地)
你希望按区域指令真正生效模式 2(云端)
你希望在控制台中存储 Protection Map 和构建历史模式 2(云端)
合规要求源代码不得离开你的基础设施模式 1(本地)

其他部署形态

Cloudflare Workers

引擎足够小,可以在 Cloudflare Worker 中运行,而云端构建正是在那里运行的:你的 bundle 在一个 Worker 隔离环境中完成变换,并在几毫秒内返回;对 Worker 来说过大的文件会自动转到容器中处理。你也可以用同样的方式在自己的 Worker 中运行 AfterPack:参见在 Cloudflare Worker 中运行 AfterPack。

在你自己的 Worker 中,给同一个 obfuscate() 调用传入你的 Pro 密钥,构建就会以模式 2 在 AfterPack 的云端运行:参见从你自己的 Worker 使用 Pro。

不得离开你基础设施的源代码

模式 1 已经解决了这个问题:Free、本地、没有网络调用,没有需要审查的东西。如果要在你自己的账户内进行私有 Pro 部署,参见 Enterprise;这不是目前可以直接开启的功能。

下一步

  • Cloud API 参考:模式 2 完整的请求/响应契约。
  • Pro:Pro 在本地引擎之上增加了什么。
  • 隐私与数据处理:每种模式存储什么,以及存储多久。
  • 套餐:哪个套餐解锁模式 2,以及它计量什么。
  • CLI 参考:驱动模式 1 的命令。
  • 配置:每一个键、标志和变量,包括 key。
  • 威胁模型:引擎换了运行位置时,什么会改变、什么不会。