From 7907f9a7d414404effff61df799945c23573b25a Mon Sep 17 00:00:00 2001
From: 李凌 <344137771@qq.com>
Date: Thu, 23 Oct 2025 15:19:12 +0800
Subject: [PATCH] 1
---
vite.config.js | 222 +++++++++++++++++++++++++++++++++++++------------------
1 files changed, 148 insertions(+), 74 deletions(-)
diff --git a/vite.config.js b/vite.config.js
index 0f9037d..6dc5105 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,84 +1,158 @@
-import { defineConfig } from 'vite'
+import {
+ defineConfig
+} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import Components from 'unplugin-vue-components/vite';
-import { VantResolver } from 'unplugin-vue-components/resolvers';
+import {
+ VantResolver
+} from 'unplugin-vue-components/resolvers';
import DefineOptions from 'unplugin-vue-define-options/vite';
-import { visualizer } from 'rollup-plugin-visualizer'
+import {
+ visualizer
+} from 'rollup-plugin-visualizer'
import legacy from '@vitejs/plugin-legacy';
-
+import obfuscator from 'rollup-plugin-obfuscator'; // 导入代码混淆插件
const isVisualizer = process.env.VISUALIZER === 'show'
export default defineConfig({
- base: '', //H5打包用
- // base: './', // APP打包用
- plugins: [
- vue(),
- Components({
- resolvers: [VantResolver()],
- }),
- DefineOptions(),
- isVisualizer && visualizer({ gzipSize: true }),
- legacy({
- targets: ['defaults', 'not IE 11'],
- }),
- ],
- css: {
- preprocessorOptions: {
- scss: {
- additionalData: `@import "@/assets/css/variable.scss";`
- },
- }
- },
- server: {
- open: true,
- port: 8085,
- hmr: true,
- host: '0.0.0.0',
- proxy: {
- "/api": {
- target: "https://104.233.210.35:8085",
- // target: "http://198.13.39.109:8081",
- changeOrigin: true,
- // rewrite: (path) => path.replace(/^\/wap/, ""),
- secure: false
- },
- },
- },
- resolve: {
- dedupe: [
- 'vue'
- ],
- alias: {
- 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
- "~": path.resolve(__dirname, './'),
- "@": path.resolve(__dirname, 'src'),
- }
- },
- build: {
- assetsDir: "static",
- rollupOptions: {
- input: {
- index: path.resolve(__dirname, "index.html"),
- },
- output: {
- chunkFileNames: 'js/[name]-[hash].js',
- entryFileNames: "js/[name]-[hash].js",
- assetFileNames: "[ext]/name-[hash].[ext]"
- },
- },
- },
- externals:['vue']
+ base: '', //H5打包用
+ // base: './', // APP打包用
+ plugins: [
+ // obfuscator({
+ // global: true, // 启用全局配置,影响所有文件
+ // // 配置项参考:https://github.com/javascript-obfuscator/javascript-obfuscator
+ // options: {
+ // compact: true, // 压缩代码,移除不必要的空格和换行
+ // controlFlowFlattening: true, // 启用控制流平坦化,混淆代码结构,增加代码阅读难度
+ // controlFlowFlatteningThreshold: 0.75, // 控制流平坦化的应用阈值,表示至少 75% 的代码将被平坦化
+ // numbersToExpressions: true, // 将数字替换为数学表达式,增加混淆
+ // simplify: true, // 简化代码,减少冗余代码
+ // stringArrayShuffle: true, // 打乱字符串数组的顺序,增加代码分析难度
+ // splitStrings: true, // 将长字符串拆分成多个短字符串
+ // splitStringsChunkLength: 10, // 拆分字符串的最大长度为 10
+ // rotateUnicodeArray: true, // 启用 Unicode 数组的旋转,增加分析的复杂度
+ // deadCodeInjection: true, // 注入无用的死代码来增加混淆
+ // deadCodeInjectionThreshold: 0.4, // 死代码注入的比例阈值,表示至少 40% 的代码为死代码
+ // debugProtection: true, // 启用调试保护,防止调试工具干扰代码执行
+ // debugProtectionInterval: 2000, // 设置调试保护间隔,防止频繁的调试攻击
+ // disableConsoleOutput: true, // 禁用控制台输出,防止泄露敏感信息
+ // domainLock: ["http://127.0.0.1:8080"], // 设置仅在指定的域名下执行代码,增加安全性
+ // identifierNamesGenerator: "hexadecimal", // 使用十六进制命名标识符,混淆代码
+ // identifiersPrefix: "", // 标识符的前缀,空表示没有前缀
+ // inputFileName: "", // 输入文件名,留空表示不指定
+ // log: true, // 启用日志记录,帮助开发者调试和跟踪代码混淆过程
+ // renameGlobals: true, // 启用全局变量重命名,避免暴露全局变量名称
+ // reservedNames: [], // 保留的变量名列表,不会被混淆的变量
+ // reservedStrings: [], // 保留的字符串列表,不会被混淆的字符串
+ // seed: 0, // 设置混淆的随机种子,确保每次混淆的一致性
+ // selfDefending: true, // 启用自我保护,防止被反混淆
+ // sourceMap: false, // 禁用源映射,防止源码泄露
+ // sourceMapBaseUrl: "", // 源映射的基础 URL
+ // sourceMapFileName: "", // 源映射的文件名
+ // sourceMapMode: "separate", // 设置源映射模式为单独文件
+ // stringArray: true, // 启用字符串数组,优化字符串的存储方式
+ // stringArrayEncoding: ["base64"], // 使用 base64 编码字符串数组,增加代码难度
+ // stringArrayThreshold: 0.75, // 字符串数组的阈值,表示 75% 的字符串将被放入数组
+ // target: "browser", // 设置目标环境为浏览器
+ // transformObjectKeys: true, // 转换对象的键名,增加混淆
+ // unicodeEscapeSequence: true, // 启用 Unicode 转义序列,增加代码难度
+
+ // // domainLockRedirectUrl: "about:blank", // 设置域名锁定重定向 URL,防止代码被其他网站执行
+ // // forceTransformStrings: [], // 强制转换的字符串列表,指定必须混淆的字符串
+ // // identifierNamesCache: null, // 标识符名称缓存,优化性能
+ // // identifiersDictionary: [], // 自定义标识符字典,用于自定义混淆标识符
+ // // ignoreImports: true, // 忽略导入的文件,不对外部库进行混淆
+ // // optionsPreset: "default", // 使用默认的配置预设
+ // // renameProperties: false, // 禁用属性重命名
+ // // renamePropertiesMode: "safe", // 属性重命名的安全模式
+ // // sourceMapSourcesMode: "sources-content", // 设置源映射的源模式,使用源内容
+
+ // // stringArrayCallsTransform: true, // 启用字符串数组调用转换,增强混淆
+ // // stringArrayCallsTransformThreshold: 0.5, // 字符串数组调用转换的阈值,表示 50% 的调用会被转换
+
+ // // stringArrayIndexesType: ["hexadecimal-number"], // 字符串数组索引的类型为十六进制数字
+ // // stringArrayIndexShift: true, // 启用字符串数组索引位移
+ // // stringArrayRotate: true, // 启用字符串数组旋转
+ // // stringArrayWrappersCount: 1, // 字符串数组包装器的数量
+ // // stringArrayWrappersChainedCalls: true, // 启用字符串数组包装器的链式调用
+ // // stringArrayWrappersParametersMaxCount: 2, // 字符串数组包装器最大参数个数
+ // // stringArrayWrappersType: "variable", // 使用变量类型的字符串数组包装器
+
+ // // assumeFunctionWrapper: true, // 假设函数被包装,防止被直接调用
+ // // bind: true, // 启用 bind 绑定,增加混淆难度
+ // // controlFlowFlatteningMaxDepth: 2, // 控制流平坦化的最大深度,避免过度平坦化
+ // // rotateStrings: true // 启用字符串旋转,增加混淆复杂度
+ // }
+ // }),
+ vue(),
+ Components({
+ resolvers: [VantResolver()],
+ }),
+ DefineOptions(),
+ isVisualizer && visualizer({
+ gzipSize: true
+ }),
+ legacy({
+ targets: ['defaults', 'not IE 11'],
+ }),
+ ],
+ css: {
+ preprocessorOptions: {
+ scss: {
+ additionalData: `@import "@/assets/css/variable.scss";`
+ },
+ }
+ },
+ server: {
+ open: true,
+ port: 8085,
+ hmr: true,
+ host: '0.0.0.0',
+ proxy: {
+ "/api": {
+ target: "https://104.233.210.35:8085",
+ // target: "http://198.13.39.109:8081",
+ changeOrigin: true,
+ // rewrite: (path) => path.replace(/^\/wap/, ""),
+ secure: false
+ },
+ },
+ },
+ resolve: {
+ dedupe: [
+ 'vue'
+ ],
+ alias: {
+ 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
+ "~": path.resolve(__dirname, './'),
+ "@": path.resolve(__dirname, 'src'),
+ }
+ },
+ build: {
+ assetsDir: "static",
+ rollupOptions: {
+ input: {
+ index: path.resolve(__dirname, "index.html"),
+ },
+ output: {
+ chunkFileNames: 'js/[name]-[hash].js',
+ entryFileNames: "js/[name]-[hash].js",
+ assetFileNames: "[ext]/name-[hash].[ext]"
+ },
+ },
+ },
+ externals: ['vue']
})
const globalSass = config => {
- const oneOfsMap = config.module.rule('scss').oneOfs.store
- oneOfsMap.forEach(item => {
- item
- .use('sass-resources-loader')
- .loader('sass-resources-loader')
- .options({
- resources: '@/assets/css/init.scss'
- })
- .end()
- });
-}
+ const oneOfsMap = config.module.rule('scss').oneOfs.store
+ oneOfsMap.forEach(item => {
+ item
+ .use('sass-resources-loader')
+ .loader('sass-resources-loader')
+ .options({
+ resources: '@/assets/css/init.scss'
+ })
+ .end()
+ });
+}
\ No newline at end of file
--
Gitblit v1.9.3