Appearance
防止代码被逆向破解
之前在GitHub上看到苹果App Store的源代码被公开了,这让我想到sourcemap,如果是设置为true的话,极有可能会将你的代码变成裸奔的状态,到时候谁都知道,不过vite构建的vue项目默认是false的,所以就算不设置也不会有问题,但是你想防止一些人会逆向破解或者更安全的,也是有一些方法的。
可以使用 vite-plugin-javascript-obfuscator 这个插件。
bash
npm install --save-dev vite-plugin-javascript-obfuscatornpm install --save-dev vite-plugin-javascript-obfuscator配置vite.config.js文件
建议只在生产环境构建时应用混淆,因为它会大大增加构建时间,并且让代码无法调试。
js
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { obfuscator } from 'vite-plugin-javascript-obfuscator'
export default defineConfig({
plugins: [
vue(),
// 只在生产环境应用混淆器
process.env. NODE_ENV === 'production' && obfuscator({
// 在这里配置混淆选项
// 官方选项文档: https://github.com/javascript-obfuscator/javascript-obfuscator
compact: true, // 紧凑输出,无换行
controlFlowFlattening: true, // 控制流扁平化
controlFlowFlatteningThreshold: 0.75,
deadCodeInjection: true, // 注入死代码
deadCodeInjectionThreshold: 0.4,
debugProtection: true, // 调试保护
debugProtectionInterval: 4000,
disableConsoleOutput: true, // 禁用 console.log
identifierNamesGenerator: 'hexadecimal', // 标识符名生成器
rotateStringArray: true,
selfDefending: true, // 自我保护
stringArray: true,
stringArrayEncoding: ['base64'],
stringArrayThreshold: 0.75,
transformObjectKeys: true,
unicodeEscapeSequence: false
})
].filter(Boolean) // 过滤掉 false 值
})// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { obfuscator } from 'vite-plugin-javascript-obfuscator'
export default defineConfig({
plugins: [
vue(),
// 只在生产环境应用混淆器
process.env. NODE_ENV === 'production' && obfuscator({
// 在这里配置混淆选项
// 官方选项文档: https://github.com/javascript-obfuscator/javascript-obfuscator
compact: true, // 紧凑输出,无换行
controlFlowFlattening: true, // 控制流扁平化
controlFlowFlatteningThreshold: 0.75,
deadCodeInjection: true, // 注入死代码
deadCodeInjectionThreshold: 0.4,
debugProtection: true, // 调试保护
debugProtectionInterval: 4000,
disableConsoleOutput: true, // 禁用 console.log
identifierNamesGenerator: 'hexadecimal', // 标识符名生成器
rotateStringArray: true,
selfDefending: true, // 自我保护
stringArray: true,
stringArrayEncoding: ['base64'],
stringArrayThreshold: 0.75,
transformObjectKeys: true,
unicodeEscapeSequence: false
})
].filter(Boolean) // 过滤掉 false 值
})
- 优点:极大地提高了代码逆向的难度,有效保护核心逻辑。
- 缺点:
- 构建时间显著增加:可能会从几秒钟变成几分钟。
- 代码体积增大:混淆后的代码通常比单纯压缩的代码要大。
- 性能可能轻微下降:复杂的混淆逻辑可能会带来微小的运行时开销。
- 完全无法调试:生产环境一旦出问题,将极难定位。
小洛的前端技术博客