# Renderer 代码混淆配置说明 ## ⚠️ 白屏问题解决方案 如果使用 `npm run build:win:obfuscated` 出现白屏,这是因为之前的混淆配置过于激进。现在已修复并提供更安全的配置。 ### 🛠️ 已修复的问题 - **移除所有unsafe选项**: 避免破坏Vue响应式系统 - **保留函数名和类名**: 确保Vue组件正常工作 - **关闭属性名混淆**: 防止破坏Vue的内部机制 - **保留更多关键标识符**: 包括Vue、Pinia、Naive UI相关的所有重要名称 ## 🎯 推荐使用方案 ### 安全混淆构建 (推荐) ```bash npm run build:win:safe ``` 这个命令使用新的安全混淆配置,提供基础保护的同时确保应用正常运行。 ### 普通构建 (无混淆) ```bash npm run build:win ``` 如果不需要混淆,使用普通构建即可。 ## 混淆功能特性 ### 安全混淆级别 (OBFUSCATE=true) - ✅ **变量名混淆**: 将局部变量名转换为短字符 - ✅ **代码压缩**: 移除空格、换行、注释 - ✅ **Console移除**: 移除console.log等调试输出 - ✅ **文件名混淆**: 生成短哈希文件名 - ✅ **保留Vue生态**: 完全兼容Vue、Naive UI、Pinia - ❌ 属性名混淆: 已禁用,避免破坏响应式 - ❌ Unsafe优化: 已禁用,确保稳定性 ## 构建命令对比 | 命令 | 混淆级别 | 安全性 | 兼容性 | 推荐场景 | |------|----------|--------|--------|----------| | `npm run build:win` | 无 | 低 | 100% | 开发测试 | | `npm run build:win:safe` | 安全混淆 | 中等 | 99% | **生产推荐** | ## 验证构建结果 ### 1. 检查应用启动 ```bash npm run build:unpack:safe npm start ``` ### 2. 检查混淆效果 查看 `out/renderer/assets/*.js` 文件: - 变量名应该是 a, b, c 等短字符 - 代码应该压缩在少数几行 - 不应有console.log输出 ### 3. 功能测试 - 所有页面正常显示 - Vue组件响应式正常 - Naive UI组件正常工作 - Electron API正常调用 ## 安全保护措施 ### 保留的重要标识符 ```javascript // Vue 核心 'Vue', 'vue', 'reactive', 'ref', 'computed', 'watch' // Vue Router 'router', 'route', 'useRouter', 'useRoute' // Pinia 'pinia', 'store', 'useStore', 'defineStore' // Naive UI 'naive', 'NaiveUi', 'useDialog', 'useMessage' // Electron 'ElectronAPI', 'ipcRenderer', 'contextBridge' ``` ### 禁用的危险选项 ```javascript // 这些选项会破坏Vue,已全部禁用 unsafe: false, unsafe_comps: false, unsafe_Function: false, unsafe_methods: false, properties: false // 属性名混淆 ``` ## 故障排除 ### 如果仍然白屏 1. **使用普通构建**: ```bash npm run build:win ``` 2. **检查控制台错误**: 打开开发者工具查看具体错误信息 3. **分步测试**: ```bash npm run build:unpack:safe # 先构建不打包 npm start # 测试是否正常 ``` ### 如果某些功能异常 1. **检查是否有动态属性访问**: 如 `obj[dynamicKey]` 可能需要特殊处理 2. **添加保留名称**: 在 `reserved` 数组中添加相关标识符 3. **临时禁用混淆**: ```bash npm run build:win # 使用普通构建 ``` ## 技术细节 ### 混淆配置要点 ```javascript terserOptions: { compress: { drop_console: true, // 移除console keep_fargs: true, // 保留函数参数(Vue需要) keep_classnames: true, // 保留类名(Vue组件) keep_fnames: true, // 保留函数名(Vue方法) unsafe: false // 禁用unsafe优化 }, mangle: { properties: false, // 不混淆属性名 reserved: [...] // 大量保留名称 } } ``` ### 为什么这样配置 - **Vue响应式系统**依赖属性名不被改变 - **组件系统**需要保留类名和函数名 - **动态属性访问**在混淆后可能失效 - **第三方库集成**需要保留特定标识符 ## 结论 新的安全混淆配置在保护代码的同时确保应用稳定运行。虽然混淆强度相比之前有所降低,但对于大多数安全需求已经足够,且避免了白屏等兼容性问题。 **推荐使用**: `npm run build:win:safe`