UniApp代码混淆不能依赖manifest.json一键开启,其confusion配置仅对App云打包生效,微信小程序和H5必须通过vue.config.js集成javascript-obfuscator插件实现构建时混淆,且须限定业务文件、禁用破坏性选项并验证产物。

UniApp 代码混淆不能靠 manifest.json 一键开启,尤其对微信小程序和 H5 完全无效——你配了 "confusion" 也白搭,它只在 App 云打包时起作用。
manifest.json 的 confusion 配置只对 App 云打包生效
很多人在 manifest.json 的 "app-plus" 下写 "confusion",以为能保护所有端,结果小程序上线后打开 unpackage/dist/build/mp-weixin 目录,app-service.js 还是明文,连注释都还在。
-
"confusion"仅影响最终生成的 iOS/Android 安装包(.ipa/.apk),且只处理nvue文件和显式列在resources中的独立.js(如utils/encrypt.js) -
pages/下的.vue文件内联 JS 不会被混淆,必须抽离为.js并用条件编译包裹(如#ifdef APP-PLUS) - 路径必须相对于项目根目录,漏掉
app-plus层级或写错大小写(比如写成App-Plus)都会导致混淆不触发 - 混淆后需解压安装包,进
www/或assets/目录查文件内容是否变成_0xabc123类标识符,而不是 base64 编码(那是加密,不是混淆)
微信小程序和 H5 必须用 javascript-obfuscator 插件
小程序/H5 基于 Webpack 构建,manifest.json 的配置被完全忽略,必须在 vue.config.js 或 vite.config.js 中集成 javascript-obfuscator。
- 推荐安装:
npm install --save-dev javascript-obfuscator - 不要混淆整个
dist目录——node_modules、app.js、vendor.js等框架/运行时文件一旦混淆,小程序会白屏或报Unexpected token - 只混淆业务逻辑文件,例如:
src/utils/api.js、src/lib/crypto.js,并在构建后脚本中定向处理 - 禁用高危选项:
controlFlowFlattening和deadCodeInjection在小程序中极易引发语法错误或执行异常 - 实测兼容性较好的组合是:
identifierNamesGenerator: 'hexadecimal'+stringArray: true+rotateStringArray: true,但stringArrayEncoding设为['rc4']会显著拖慢启动速度
混淆后必须验证产物是否真实生效
配完插件不代表就安全了。很多项目上线后才发现 JS 还是明文,原因常出在构建环境或路径判断上。
- 先确认构建命令走的是 production 模式:
console.log(process.env.NODE_ENV)输出必须是'production' - 小程序检查路径是
unpackage/dist/build/mp-weixin/**/*.js,不是dev目录下的临时文件 - H5 要关掉
sourceMap,否则浏览器里仍能通过sources面板还原部分逻辑 - 如果使用 HBuilderX 发行,记得勾选「发行时不生成 sourceMap」,并确保外部命令脚本读取的是
unpackage下的最终产物,而非中间缓存 - 混淆后务必真机测试:重点看页面生命周期(
onLoad、onShow)、网络请求、加密函数是否正常执行,某些字符串加密逻辑在混淆后可能因eval或Function调用失败
混淆不是加个配置就一劳永逸的事——每次升级 javascript-obfuscator 版本、切换 uni-app 编译器(v2/v3)、或引入新依赖,都可能让原有混淆策略失效。最稳妥的做法是把混淆步骤固化为构建后脚本,并加入 CI 流程做产物扫描校验。











