首页 > 编程语言 >vite3+vue3 实现前端部署加密混淆 javascript-obfuscator

vite3+vue3 实现前端部署加密混淆 javascript-obfuscator

时间:2024-11-14 09:56:23浏览次数:1  
标签:const obfuscator javascript fileName vue3 js 打包

安装
pnpm install javascript-obfuscator

安装之后 在项目根目录新建一个 obfuscator.js

在 obfuscator.js 写入以下代码 直接复制粘贴
`
/**

  • @用法
  • vite打包完成后,使用命令行nodejs执行本文件: node obfuscator.js
  • 它会挨个把里面的js文件做混淆然后替换
  • @说明
  • 本质就是依赖这个工具
  • 底层实现就是把代码全部作为一个字符串丢给它,它内部调用其他包来分析语法,做混淆替换
  • @doc https://github.com/javascript-obfuscator/javascript-obfuscator
  • @拓展
  • obfuscator.js也有对应 webpack 的 plugin 和 rollup(vite打包用的就是rollup) 的 plugin
  • 实现起来比较简单,如有需要也可以自己找符合要求的plugin或者自己写一个,本质上就是把这个文件的执行过程自动追加到打包过程中
    */
    const JavaScriptObfuscator = require('javascript-obfuscator')
    const fs = require('fs')

// 配置
const buildDir = './dist/assets/'

/**

  • 获取目录下所有js文件及内容字符串

  • @result {fileName:string, content:string}[]
    */
    const getJsFileList = (dir) => new Promise((resolve) => {
    fs.readdir(dir, (err, files) => {
    if (err) return reject([obfuscator] output dir not exist!)

     return resolve(Promise.all(files.filter(fileName => fileName.endsWith('.js')).map(fileName => new Promise(resolveInner => {
         fs.readFile(dir + fileName, (err, data) => {
             return resolveInner({ fileName, content: data.toString() })
         })
     }))))
    

    })
    })

getJsFileList(buildDir).then(list => {
console.log([obfuscator] start)
Promise.all(list.map(it => new Promise(resolve => {
console.log(it.fileName)

    const obfuscationResult = JavaScriptObfuscator.obfuscate(it.content, {
        /** 这些都是配置 */
        compact: false,
        controlFlowFlattening: true,
        controlFlowFlatteningThreshold: 1,
        numbersToExpressions: true,
        simplify: true,
        stringArrayShuffle: true,
        splitStrings: true,
        stringArrayThreshold: 1
    })
    fs.writeFile(buildDir + it.fileName, obfuscationResult.getObfuscatedCode(), () => {
        console.log(`[obfuscator] file done ${ it.fileName }`)
        resolve(1)
    })
}))).then(() => {
    console.log(`[obfuscator] finished`)
})

})
`

目前只是配置好了要执行的脚本,如若要加密 先打包项目 执行pnpm build,打包结束后通过node命令执行脚本 node obfuscator.js。执行成功后会有提示
这时候dist目录下的assets文件夹内容已经加密完成。可直接部署到nginx。

常见错误:

问题描述
打包好项目发布上传到 nginx 后,浏览器访问,出现一下报错信息:

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec
这个错误提示的意思是:网页中使用了模块脚本(module script),但服务器返回的 MIME 类型是 “text/html”,而不是 JavaScript 类型。根据 HTML 规范,严格的 MIME 类型检查会对模块脚本进行强制执行。

将vite配置中 base 改为 '/',我的之前是 /。按照以下配置改完后重新打包部署,重启nginx即可解决

标签:const,obfuscator,javascript,fileName,vue3,js,打包
From: https://www.cnblogs.com/jxl123456/p/18545411

相关文章

  • 24.11.12 JavaScript2
    prompt()confirm()这些函数会阻止js解析器(js解析器执行引擎读取运行js)执行不要使用2history对象历史记录对象对应浏览器前进后退按钮history在历史记录里back前进forward后退go0当前文档负数后......
  • 24.11.13 Javascript3
    Javascript31.dom元素获取查找元素的函数getElementById("id值")查找到唯一一个元素getElementsByClassName("class值")查找指定class的元素数组getElementsByTagName("标签名")查找指定标签名的元素......
  • JavaScript新版本6个新功能盘点
    JavaScript在2024年更新引入了6个关键功能。从使文本和日期更易于处理,到程序等待和协同工作的新方法,甚至使模式更容易查找。我们一起来看看吧!01、格式正确的Unicode字符串格式良好的Unicode字符串引入了确保JavaScript中的字符串以UTF-16编码正确格式化的方法。此......
  • JAVASCRIPT 将推出新的时间、日期和集合功能
    我们预计将在ECMAScript2025中看到的重大JavaScript新功能,以及导致它们延迟的讨论。译自JavaScriptDueforNewTime,DateandSetFeaturesNextYear,作者MaryBranscombe。JavaScript下一个年度更新将在新年初确定其包含的功能,包括在2025年3月前达到最终第四阶......
  • JavaScript常用对象方法一:字符串(string)
    string对象有很多方法,但一般开发里,一些方法很少用到,比如concat(),他的作用似乎将两个字符串拼接起来,但开发时,使用加号也能实现字符串拼接效果,所以这种方法就不介绍了。这里只介绍一些开发常用的方法,不多,但都很重要,属于必须掌握的方法1.indexOf()返回某个指定的字符串值在字符串......
  • javaScript对象函数初相识
    1.1、对象初相识1.1.1、对象的初识1.1.1.1、对象的定义现实生活中,万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如一本书,一辆汽车,一个人可以是“对象”,一个数据库,一张网页,一个与远程服务器的连接也可以是“对象”。例子:明星、女朋友、班主任、苹果、手机周星驰......
  • Vue3的高级概念
    片段(Fragment)问题:在Vue组件中,通常只能返回一个根元素。如果需要返回多个根元素,传统的做法是包裹在一个父元素中,但这可能会影响布局或样式。解决方案:Vue3引入了片段(Fragment),允许组件返回多个根元素,而不需要额外的父元素。示例代码:plaintext<template><div>Element......
  • javascript如何进行冒泡排序?
    冒泡排序的规律有一个数组[5,4,3,2,1],假如说要重新排序,进行升序排序,冒泡排序步骤如下5和4比较,5大,5和4交换位置[4,5,3,2,1]5和3比较,5大,5和3交换位置[4,3,5,2,1]5和2比较,5大。5和2交换位置[4,3,2,5,1]5和1比较,5大,5和1交换位置[4,3,2,1,5]5排到了最后一位4开始和后面的......
  • 揭秘!Vue3.5响应式重构如何让内存占用减少56%
    前言Vue3.5版本又将响应式给重构了,重构后的响应式系统主要有两部分组成: 双向链表和版本计数。我们在前两篇文章中我们已经讲过了,这篇文章我们来讲讲为什么这次重构能够让内存占用减少56%。为什么说“又”将响应式重构了因为在之前的Vue3.4版本中刚刚将响应式给重构了,这......
  • vue3开发扫雷游戏,支持调整难度,支持计时
    闲来练习练习js,写了个扫雷游戏,直接拿去复制粘到自己本地某个html文件里就能运行,记得把vue加载地址改成线上的~~有空了可以再加上计分板运行起来长下面这样 直接上代码 1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<met......