恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

vite项目使用自定义插件调用javascript-obfuscator进行加密。

  • 首页
  • 资讯中心
  • /
  • vite项目使用自定义插件调用javascript-obfuscator进行加密。

相关资讯

从 ActiveRecord 到 Dynamoid:Ruby 应用迁移 DynamoDB 的 6 个关键步骤与 10 条避坑清单 2026/8/27 15:55:02
Figma还是Sketch?shots App Store截图模板双版本深度对比,哪款更适合你的工作流 2026/8/27 15:55:02
MT-GNN:连续时间网格演化与度量张量嵌入的脑形态预测 2026/8/27 15:55:02

最新资讯

ExLlamaV3分页KV缓存与连续动态批处理:内存管理底层逻辑图解
从开发到上架:Android Smart WebView应用发布到Google Play的完整清单(14项检查步骤)
UI-Venus轨迹录制与回放:逐步复盘AI智能体每一步决策的完整方法
【AI大模型】终于跑通!基于n8n的多Agent协作工作流,多智能体协作构建大模型工作流实战
AI大模型术语详解(收藏版):从小白到程序员必知的7大核心概念,看到就是赚到!!
如何优雅显示 Vue.js 表单错误?vue-form field-messages 组件完全指南

今日推荐

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用
LeetCode Hot100(51-60)算法精解与面试技巧
CRC校验实战:从模2除法到HJ212协议排错

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

vite项目使用自定义插件调用javascript-obfuscator进行加密。

发布时间:2026/8/27 15:55:02
vite项目使用自定义插件调用javascript-obfuscator进行加密。 找了一圈加密的方法发现大部分都是会把项目依赖进行加密实际需求项目依赖是不需要加密的只有自己写的代码才需要所以这边手搓了一个插件进行文件简单加密体积增加的不多当然也保留了自定义配置。插件代码如下importjavascriptObfuscatorfromjavascript-obfuscator;constdefaultConfig{compact:true,// 压缩代码controlFlowFlattening:false,// 控制流扁平化deadCodeInjection:false,// 死代码注入 会导致包体积变大debugProtection:false,// 调试保护debugProtectionInterval:0,// 调试保护间隔disableConsoleOutput:true,// 禁用控制台输出identifierNamesGenerator:mangled-shuffled,// 标识符名称生成器 hexadecimal(十六进制) mangled(短标识符)log:false,// 是否显示日志numbersToExpressions:false,// 数字转换为表达式renameGlobals:false,// 重命名全局变量selfDefending:true,// 自我防御simplify:true,// 简化代码splitStrings:false,// 分割字符串stringArray:false,// 字符串数组transformObjectKeys:false,// 转换对象键unicodeEscapeSequence:true,// Unicode 转义序列reservedNames:[^slot$,^v-slot$,^scopedSlots$,^\\$scopedSlots],reservedStrings:[\\$emit,\\$attrs,\\$listeners],};/** * 判断一个输出 chunk 是否包含手写源码src/ 目录下的模块 * 仅对包含手写代码的 chunk 做混淆纯第三方依赖的 chunk 跳过 * param {Object} chunk - Rollup 输出 chunkOutputChunk * returns {boolean} 是否包含 src/ 下的模块 */functionhasSourceCode(chunk){if(!chunk||!chunk.modules)returnfalse;returnObject.keys(chunk.modules).some((modulePath){returnmodulePath.includes(/src/)||modulePath.startsWith(src/);});}/** * param {object} config 配置文件 可参考 https://github.com/javascript-obfuscator/javascript-obfuscator?tabreadme-ov-file#options 默认使用 defaultConfig 不了解请不要随便更改 * returns {object} 插件对象 */exportdefaultfunctionobfuscatePlugin(configdefaultConfig){return{name:liiy:obfuscatefiles,enforce:post,apply:build,generateBundle(options,bundle){console.log(\n);console.time(加密文件耗时);letcount0;letskipped0;for(const[filePath,chunk]ofObject.entries(bundle)){// 只处理 JS chunk跳过 CSS / asset / sourcemapif(!chunk.code)continue;// 跳过 vendor-* 手动分包已在 manualChunks 中排除constfileNamefilePath.split(/).pop()||filePath;if(fileName.startsWith(vendor-)){skipped;continue;}// 跳过不包含手写源码的 chunk纯第三方依赖的自动分包if(!hasSourceCode(chunk)){skipped;continue;}chunk.codejavascriptObfuscator.obfuscate(chunk.code,config).getObfuscatedCode();count;}console.log(\n共加密${count}个文件手写代码跳过${skipped}个文件第三方依赖);console.timeEnd(加密文件耗时);console.log(加密文件结束\n);},};}这边为了区分是源码还是自己写的就用了lodash的进行拆分把依赖单独拆出来当然如果觉得体积变大无所谓的话可以用现成的一步到位。配置以及使用方式如下import{defineConfig}fromvite;importvuefromvitejs/plugin-vue;importobfuscatePluginfrom./src/utils/obfuscatePlugin;// https://vitejs.dev/config//** type {import(vite).UserConfig} */exportdefault({mode})defineConfig({......plugins:[vue({template:{precompileRoot:false}}),obfuscatePlugin(),// 自定义插件写在这],build:{outDir:dist-ui-mode,rollupOptions:{// 排除纯 Node.js 库file-viewer 的间接依赖浏览器无法使用// 同时匹配裸模块名和 pnpm 解析后的完整路径external:(id){if(idavsc||idljheee/xmind-parser||idsafer-buffer)returntrue;return/node_modules[\\/](\.pnpm[\\/])?(avsc|ljheee[\/\-]xmind-parser|safer-buffer)(|[\\/])/.test(id);},output:{manualChunks:{// 大库独立分包避免单一巨型 chunkvendor-vue:[vue,vue-router,vuex],vendor-element:[element-plus,element-plus/icons-vue],vendor-echarts:[echarts],vendor-vant:[vant],vendor-utils:[axios,socket.io-client,localforage,qs],vendor-ui:[tailwindcss,nprogress,markstream-vue],vendor-misc:[md5-node],vendor-file-viewer:[file-viewer/vue3-full],},},},},.....});这样就可以进行单独给些的组件和js进行加密了体积控制的不错如果可以使用代码请标注出处。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号