当前位置: 首页 > news >正文

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

找了一圈加密的方法发现大部分都是会把项目依赖进行加密,实际需求项目依赖是不需要加密的,只有自己写的代码才需要,所以这边手搓了一个插件进行文件简单加密,体积增加的不多,当然也保留了自定义配置

插件代码如下:

import javascriptObfuscator from "javascript-obfuscator";const defaultConfig = {compact: true, // 压缩代码controlFlowFlattening: false, // 控制流扁平化deadCodeInjection: false, // 死代码注入 会导致包体积变大debugProtection: true, // 调试保护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"],
};/*** @param {object} config 配置文件 可参考 https://github.com/javascript-obfuscator/javascript-obfuscator?tab=readme-ov-file#options 默认使用 defaultConfig 不了解请不要随便更改* @returns {object} 插件对象*/
export default function obfuscatePlugin(config = defaultConfig) {return {name: "liiy:obfuscatefiles",enforce: "post", // 确保在最后执行apply: "build", // 仅在生产构建时执行transformIndexHtml(html, event) {console.log("\n");console.time("加密文件耗时");console.log("开始进行文件加密:", "\n");if (!(event != null && event.bundle)) return html;for (const [path, options] of Object.entries(event.bundle)) {if (options.code) {if (!path.includes("node_modules")) {console.log("加密转换文件 -->>", path);options.code = javascriptObfuscator.obfuscate(options.code, config).getObfuscatedCode();}}}console.log("\n");console.timeEnd("加密文件耗时");console.log("加密文件结束", "\n");return html;},};
}

这边为了区分是源码还是自己写的就用了lodash的进行拆分,把依赖单独拆出来,当然,如果觉得体积变大无所谓的话可以用现成的一步到位。

配置以及使用方式如下:

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import obfuscatePlugin from "./src/utils/obfuscatePlugin";// https://vitejs.dev/config/
/** @type {import('vite').UserConfig} */
export default ({ mode }) =>defineConfig({......plugins: [vue({ template: { precompileRoot: false } }),obfuscatePlugin(), // 自定义插件写在这],build: {rollupOptions: {output: {manualChunks: {// 自定义分包策略lodash: ["lodash"],node_modules: ["@element-plus/icons-vue","axios","echarts","element-plus","vue","vue-router","vuex",],},},},},.....});

这样就可以进行单独给些的组件和js进行加密了,体积控制的不错,如果可以使用代码请标注出处。


文章转载自:

http://RVPJ66OC.rmfwh.cn
http://W8VrX2li.rmfwh.cn
http://4sglHnuj.rmfwh.cn
http://8RrqqJsY.rmfwh.cn
http://jJoq4MRs.rmfwh.cn
http://Bq2ARmJv.rmfwh.cn
http://ezDC4vgw.rmfwh.cn
http://SicIeup6.rmfwh.cn
http://9rnQ3VHQ.rmfwh.cn
http://0FHfynyt.rmfwh.cn
http://Td5b7A27.rmfwh.cn
http://QS6OtJJW.rmfwh.cn
http://o28sSLaz.rmfwh.cn
http://VRuvxNYK.rmfwh.cn
http://Ajt0YCcF.rmfwh.cn
http://3UbBVamb.rmfwh.cn
http://ftmErJYT.rmfwh.cn
http://1HJjnm9j.rmfwh.cn
http://M2DU4nuu.rmfwh.cn
http://rm2eNVe3.rmfwh.cn
http://MZcTwv1N.rmfwh.cn
http://Cs2B07R0.rmfwh.cn
http://cGcHd626.rmfwh.cn
http://9FXE6oPP.rmfwh.cn
http://bhCS06hF.rmfwh.cn
http://qK3b73Ky.rmfwh.cn
http://7FWK5KjC.rmfwh.cn
http://de6AGPFi.rmfwh.cn
http://JfNuH8ef.rmfwh.cn
http://yUYhTvos.rmfwh.cn
http://www.dtcms.com/a/369624.html

相关文章:

  • 数据结构堆树java版本实现(大顶堆)
  • 飞牛NAS配置FRP内网穿透:实现远程访问
  • C++ 文字识别OCR
  • 告别“失忆”AI:打造有记忆、有温度的智能助手
  • 龙虎榜——20250905
  • 不上融资、不炒概念,它却成了全球AI“全明星”中国独苗!
  • 第八章 Cesium 实现动态模型拖尾效果:从原理到完整实现
  • java基础学习(四):类 - 了解什么是类,类中都有什么?
  • VMWare上搭建大数据集群
  • TGRSL-2017《Fast Spectral Clustering with Anchor Graph》
  • 雅菲奥朗SRE知识墙分享(七):『可观测性的定义与实践』
  • SQLServer死锁监测方案:如何使用XE.Core解析xel文件里包含死锁扩展事件的死锁xml
  • 人脑算力究竟有多强?1000 到 100万 TOPS 的秘密!
  • 各种exec 系列函数
  • 推荐收藏!5款低代码工具,告别复杂开发!
  • 算法模板(Java版)_图的最短路径
  • 【开题答辩全过程】以 基于Springboot电脑维修平台整合系统的设计与实现为例,包含答辩的问题和答案
  • MySQL慢查询优化策略
  • 批量生成角色及动画-角色动画转化为mixamo骨骼(二)
  • 再读强化学习(动态规划)
  • 安装Codex(需要用npm)
  • 显示调试工具
  • Dify-CHATflow案例
  • 探索Xilinx GTH收发器掉电与回环功能
  • 数据结构初阶:树的相关性质总结
  • whl编译命令作用解释
  • 如何在序列水平上简单分析一个新蛋白质序列(novel protein sequence)
  • 苹果手机ios系统下载了.apk文件程序怎么安装?
  • 认知篇#11:计算机视觉研究领域的大致分类
  • 如何高效比对不同合同版本差异,避免法律风险?