vue 项目代码混淆配置(自定义插件适用)带配置项注释

2023-11-04

vue 项目代码混淆配置(自定义插件适用)带配置项注释

一、概要

  • 本文章适用 vue-cli3/webpack4 搭建的vue项目,vue-cli2或者 webpack@2@3版本混淆查看这篇webpack2 webpack 3 低版本混淆代码打包
  • 配置完成后只需在文件名或者文件夹名加上 -obfuscate 后缀,打包的时候即可将该js文件或者文件夹下的所有js文件混淆处理
  • 也可用于其他 webpack 构建的项目,步骤差不多

二、混淆步骤

1. 引入混淆插件
  • 使用 vue-cli3/4 新建的项目内置的 webpack 是 @4 版本的,所以这里只能使用 @2 版本的混淆插件
  • webpack@5 可以使用最新的混淆插件
  • node_modules/webpack/package.json 中可以查看当前项目的 webpack 版本
npm i javascript-obfuscator -D
2. 添加混淆配置

在 vue.config.js中加入如下代码

//代码混淆
var JavaScriptObfuscator = require("webpack-obfuscator");
// 生产环境,测试和正式
const IS_PROD = ["production", "prod", "uat"].includes(process.env.NODE_ENV);
module.exports = {
  publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
  productionSourceMap: false,
  configureWebpack: (config) => {
    if (IS_PROD) {
      return {
        plugins: [
          new JavaScriptObfuscator(
            {
              // 打乱Unicode数组顺序
		      rotateUnicodeArray: true, 
		      // 紧凑 从输出混淆代码中删除换行符。
		      compact: true, 
		      /* 此选项极大地影响了运行速度降低1.5倍的性能。 启用代码控制流展平。
		      控制流扁平化是源代码的结构转换,阻碍了程序理解。*/
		      controlFlowFlattening: true, 
		      controlFlowFlatteningThreshold: 0.8,
		      /* 此选项大大增加了混淆代码的大小(最多200%) 此功能将随机的死代码块
		      (即:不会执行的代码)添加到混淆输出中,从而使得更难以进行反向工程设计。*/
		      deadCodeInjection: true, 
		      deadCodeInjectionThreshold: 0.5,
		      // 调试保护  如果您打开开发者工具,可以冻结您的浏览器。
		      debugProtection: false, 
		      /* 如果选中,则会在“控制台”选项卡上使用间隔强制调试模式,这使得使用“开发
		      人员工具”的其他功能变得更加困难。它是如何工作的?一个调用调试器的特殊代码;
		      在整个混淆的源代码中反复插入。*/
		      debugProtectionInterval: false, 
		      /* 通过用空函数替换它们来禁用console.log,console.info,
		      console.error和console.warn。这使得调试器的使用更加困难。*/
		      disableConsoleOutput: true, 
		      /* 锁定混淆的源代码,使其仅在特定域和/或子域上运行。这使得有人只需复制并粘
		      贴源代码并在别处运行就变得非常困难。多个域和子域可以将代码锁定到多个域或子域。
		      例如,要锁定它以使代码仅在www.example.com上运行添加www.example.com,以使其
		      在example.com的任何子域上运行,请使用.example.com。*/
		      domainLock: [], 
		      // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
		      identifierNamesGenerator: 'hexadecimal', 
		      // 此选项使所有全局标识符都具有特定前缀。
		      identifiersPrefix: '', 
		      inputFileName: '',
		      log: false,
		      // 不要启动 通过声明启用全局变量和函数名称的混淆。
		      renameGlobals: false, 
		      /* 禁用模糊处理和生成标识符,这些标识符与传递的RegExp模式匹配。例如,
		      如果添加^ someName,则混淆器将确保以someName开头的所有变量,函数名和函数参数都
		      不会被破坏。*/
		      reservedNames: [], 
		      /* 禁用字符串文字的转换,字符串文字与传递的RegExp模式匹配。例如,如果添加^ some * string,
		      则混淆器将确保以某些字符串开头的所有字符串都不会移动到`stringArray`。*/
		      reservedStrings: [], 
		      /* 通过固定和随机(在代码混淆时生成)的位置移动数组。这使得将删除的字符串的顺序与
              其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可
              以引起注意。*/
		      rotateStringArray: true, 
		      /* 默认情况下(seed = 0),每次混淆代码时都会得到一个新结果(即:不同的变量名,
		      插入stringArray的不同变量等)。如果需要可重复的结果,请将种子设置为特定的整数。*/
		      seed: 0, 
		      /* 此选项使输出代码能够抵抗格式化和变量重命名。如果试图在混淆代码上使用JavaScript
		      美化器,代码将不再起作用,使得理解和修改它变得更加困难。需要紧凑代码设置。*/
		      selfDefending: true, 
		      /* 请确保不要上传嵌入了内嵌源代码的混淆源代码,因为它包含原始源代码。源映射可以帮助您调
		      试混淆的Java Script源代码。如果您希望或需要在生产中进行调试,可以将单独的源映射文件上载
		      到秘密位置,然后将浏览器指向该位置。*/
		      sourceMap: false, 
		      // 这会将源的源映射嵌入到混淆代码的结果中。如果您只想在计算机上进行本地调试,则非常有用。
		      sourceMapBaseUrl: '', 
		      sourceMapFileName: '',
		      sourceMapMode: 'separate',
		      /* 将stringArray数组移位固定和随机(在代码混淆时生成)的位置。这使得将删除的字符串的顺序
		      与其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可以引起注意。*/
		      stringArray: true, 
		      /* 此选项可能会略微降低脚本速度。使用Base64或RC4对stringArray的所有字符串文字进行编码,
		      并插入一个特殊的函数,用于在运行时将其解码回来。*/
		      stringArrayEncoding: ['base64'], 
		      /* 您可以使用此设置调整字符串文字将插入stringArray的概率(从0到1)。此设置在大型代码库中
		      很有用,因为对stringArray函数的重复调用会降低代码的速度。*/
		      stringArrayThreshold: 0.8, 
		      /* 您可以将混淆代码的目标环境设置为以下之一: Browser 、Browser No Eval 、Node 目前浏览器
		      和节点的输出是相同的。*/
		      target: 'browser', 
		      /* 转换(混淆)对象键。例如,此代码var a = {enabled:true};使用此选项进行模糊处理时,
		      将隐藏已启用的对象键:var a = {};a [_0x2ae0 [('0x0')] = true;。 
		      理想情况下与String Array设置一起使用。*/
		      transformObjectKeys: true, 
		      /* 将所有字符串转换为其unicode表示形式。例如,字符串“Hello World!”
		      将被转换为“'\ x48 \ x65 \ x6c \ x6c \ x6f \ x20 \ x57 \ x6f \ x72 \ x6c \ x64 \ x21”。*/
		      unicodeEscapeSequence: true, 
		      // ... [See more](https://github.com/javascript-obfuscator/javascript-obfuscator)
			},
            []
          ),
        ],
      };
    }
  },
};

通过以上代码,就完成JavaScriptObfuscator配置了

3. 执行代码混淆

build项目时,代码就被混淆过了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 项目代码混淆配置(自定义插件适用)带配置项注释 的相关文章

  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 我可以动态创建/销毁 Vue 组件吗?

    因此 我正在创建一个相当复杂的 Vue 应用程序 它从后端 API 获取数据并将其显示在前端 具体取决于用户选择的过滤器 它的默认设置是立即显示所有内容 然后一旦用户选择过滤器 它就会拉出不具有这些属性的 卡片 组件 直到今天 一切都很顺利
  • 为什么隐式符号到字符串转换会导致 JavaScript 中出现类型错误?

    有一个 toString on Symbol在 ES6 中 它返回字符串表示形式Symbol 但想知道为什么 Symbol 不起作用 运行这个表达式会抛出TypeError我没想到 后者只是打电话吗 toString 在一个新的Symbol
  • Sonar 中的 javascript 代码覆盖率

    我是使用 Sonar 和插件进行 javascript 代码覆盖的新手 使用 Sonar 分析时 有哪些可能性可以找出 javascript 代码的质量 包括代码覆盖率 目前我正在使用 karma runner 它提供代码覆盖率报告 可以在
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 将异步事件监听器与 Nestjs EventEmitter 模块和无服务器函数结合使用

    我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程 处理程序在发出事件时被调用 但该函数在 async await 调用之前关闭 我尝试过同时使用emit and emitA
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • 构建 Vue 微前端应用程序(带有路由和 vuex 存储)

    我需要帮助配置使用 Vuex Vue Router 和 Vue i18n 的微前端应用程序的构建 分发 TL DR 我在构建将导入到现有系统中的微前端应用程序时遇到问题 我们的团队尝试通过 vue cli service 和 vue web
  • Firebase 身份验证在 iOS 登录时卡住,没有错误

    我已经使用电子邮件和密码设置了 firebase 身份验证登录的最基本实现 firebase auth signInWithEmailAndPassword email password then gt console log Logged
  • 如何知道浏览器空闲时间?

    如何跟踪浏览器空闲时间 我用的是IE8 我没有使用任何会话管理 也不想在服务器端处理它 这是纯 JavaScript 方法来跟踪空闲时间 并在达到一定限制时执行一些操作 var IDLE TIMEOUT 60 seconds var idl
  • put方法中的Angularjs文件上传不起作用

    我有一个简单的待办事项应用程序 我试图在其中上传照片和单个待办事项 现在我已经创建了这个工厂函数来负责待办事项的创建 todosFactory insertTodo function todo return http post baseUr
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • JavaScript 提升解释

    下面的片段有什么区别 var a 0 function b a 10 return function a b console log a gt 10 and var a 0 function b a 10 return function a
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • ReactJs 警告:不推荐使用改变“style”。考虑事先克隆它

    我收到以下警告 inWarning div was passed a style object that has previously been mutated Mutating style is deprecated Consider c

随机推荐

  • Java-基于SSM的人事管理系统

    项目背景 在高速发展的时代 众多的软件被开发出来 给用户带来了很大的选择余地 而且人们越来越追求更个性的需求 在这种时代背景下 人们对人事管理系统越来越重视 更好的实现人事管理系统的有效发挥 本文将通过人事管理系统的信息 分析在日常生活中对
  • linux搭建测试环境

    微信设置水滴昵称 个性中带点萌 Linux搭建测试环境安装软件详细步骤 一 安装jdk1 8 二 jdk与tomact对应版本 三 安装tomact 四 安装mysql mysql 5 7 24 linux glibc2 12 x86 64
  • 高考+考研,如何选择人工智能相关专业?

    世界杯如火如荼 高考报志愿 确定考研目标也在火热展开中 人工智能行业如此热门 那么目前都哪有 科班 专业可供选择呢 结合相关资料 整理出与AI紧密相关的国内高校与科研院所名单 希望能帮到小伙伴们 成为朝阳产业 人工智能是研究 开发用于模拟
  • 删除文件名含有特殊字符的文件

    删除文件名含有特殊字符的文件 当你要删除含有特殊字符的文件名时 有以下几种情况 使用转义字符 引号 rm rf rm rf rm rf 上述命令删除文件名为 的文件 如果直接删除 那么根目录中的所有文件都会丢失 这种方式能够适用于大多数情况
  • jenkins war包 centos启动安装指导

    文章目录 问题回顾 1 进入官网 下载到Jenkins的war包 1 1 放置在指定位置 1 2 放置安装包和创建文件放置路径 1 3 检查环境 1 4 配置启动命令和结束命令 2 启动后进入到Jenkins页面 2 1 安装插件 例如流水
  • (一)Springboot原理源码解析之Springboot框架组成

    目录 一 总体框架构成 1 注解组成关系 2 类继承和调用关系 二 框架总体调用流程 1 入口类中的流程 2 Spring刷新流程 一 总体框架构成 我在分析Springboot的组成部分把其分成了两部分 注解组成及关系 主要说明了在启动过
  • LeetCode.81 搜索旋转排序数组Java

    LeetCode 81 搜索旋转排序数组 注意 通过mid和左边数字大小可以判断到底是左边有序还是右边有序 需要处理重复数字最后才能通过 代码 class Solution public boolean search int nums in
  • 信奥赛一本通 C++题解 2034【例5.1】反序输出

    2034 例5 1 反序输出 时间限制 1000 ms 内存限制 65536 KB 提交数 23315 通过数 9932 题目描述 输入n 个数 要求程序按输入时的逆序把这n个数打印出来 已知整数不超过100个 也就是说 按输入相反顺序打印
  • Element-ui表单验证验证失败,input内有内容仍然验证为空的问题,验证数值类型不一致问题

    首先展示正确的格式 以验证是否为空为例 html代码块
  • QProcess 类使用总结

    背景 QProcess 类用于启动外部程序并与它们通信 QProcess 将进程视为I O 设备 可以对进程进行写入和读取 调用参数设置 同时指定路径和参数调用程序 QProcess process new QProcess this pr
  • 阿里云轻量级服务器安装--宝塔面板

    一 环境 1 服务器 阿里云轻量级服务器 2 环境 CentOS 7 6 二 安装 1 打开远程链接 2 输入安装命令 yum install y wget wget O install sh http download bt cn ins
  • js加密字符串

    字符串加密 用javascript对字符串进行加密 应用于参数传递等 默认加密密钥为kb1234 使用者可自定义修改 注意加密密钥应和解密密钥相同 算法来自于互联网 使用方法 加密 var code kbt encrypt 我爱北京天安门
  • 大算力时代已经到来

    计算机发展到现在 早已经历了大数据时代 而现如今国家也注意到国民大数据的重要性 而给予保护性条款和制度的建立 我觉得这只是早已注定的结局 但是未来该走向何方 着眼当下 我们互联网人早已身处在答案之中 大算力 Big Computing Po
  • 清除windows登录密码

    清除windows登录密码 原理 替换登录界面中的工具 登录界面中的轻松使用中的工具一般有放大镜 c Windows System32 Magnify exe 屏幕键盘 讲述人等 可以使用下列方法之一完成 命令行下的操作 替换后重启系统 点
  • 为什么打两拍可以消除亚稳态的影响?

    为什么打两拍可以消除亚稳态的影响 首先 我们需要了解什么是亚稳态 看下图 简单来说 就是当时钟信号上升沿到来的时候正好采样的数据也在发生变化 但是对于采样的时钟信号 如果想要采样得到一个稳定值 在clk的上升沿的前一段时间有一个建立时间TS
  • POP3协议分析

    感谢原作者 http blog csdn net bripengandre article details 2192111 POP3协议分析 第1章 POP3概述 POP3全称为Post Office Protocol version3 即
  • vue/js实现文件流下载,文件下载进度监听

    文档下载 通过文档请求 直接下载文档 url 请求路径 fileName 下载名称 size 文件大小 loadDown url fileName size var this this var xhr new XMLHttpRequest
  • django2.0.6 连接使用redis集群

    环境需要 django gt 1 8 x python 2 7 或者python gt 3 4 安装django cluster redis包 pip install django redis 注意 django redis版本需要 gt
  • springSecurity基本使用2(实现简单的登录功能)

    文章目录 前言 一 实现用户创建 登陆后才能访问接口 注重用户认证 1 定义一个内存用户 不使用默认用户 2 效果 3 退出登陆 4 再创建一个张三用户 同时支持多用户登陆 二 实现管理员功能 注重权限控制 1 创建一个普通用户demo 2
  • vue 项目代码混淆配置(自定义插件适用)带配置项注释

    文章目录 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 二 混淆步骤 1 引入混淆插件 2 添加混淆配置 3 执行代码混淆 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 本文章适用 vue cli3