vue2 混淆打包


    "javascript-obfuscator": "4.0.0",
    "webpack-obfuscator": "2.6.0"
const path = require('path')

function resolve(dir) {
  return path.join(__dirname, dir)
}
const WebpackObfuscator = require('webpack-obfuscator')
module.exports = {
  publicPath: '/admin',
  lintOnSave: false,
  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建
  productionSourceMap: false,
  css: {
    loaderOptions: {
      sass: {
        prependData: '@import "@/assets/styles/_variable.scss";'
      }
    }
  },
  configureWebpack: {
    externals: {}
  },
  chainWebpack: config => {
    config.when(process.env.NODE_ENV === 'production', config => {
      config.entry.app = ['babel-polyfill', './src/mian.js']
      config.plugin('html').tap(args => {
        args[0].isProd = true
        return args
      })
      config.optimization.splitChunks({
        chunks: 'all',
        cacheGroups: {
          libs: {
            name: 'chunk-libs',
            test: /[\\/]node_modules[\\/]/,
            priority: 10,
            chunks: 'initial' // 只包最初依赖的第三方
          },
          elementUI: {
            name: 'chunk-elementUI', // 将 elementUI 拆分为单个包
            priority: 20, // 重量需要大于libs和app,否则会被打包成libs或app
            test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // 为了适应cnpm
          },
          commons: {
            name: 'chunk-commons',
            test: resolve('src/components'), // 可以定制你的规则
            minChunks: 3, //  最少 common 数值
            priority: 5,
            reuseExistingChunk: true
          }
        }
      })
      config.plugin('webpack-obfuscator').use(WebpackObfuscator, [
        {
          // 旋转字符串数组
          rotateStringArray: true,
          // 压缩代码
          compact: true,
          // 代码自我保护,混淆后的代码,不能使用代码美化,同时需要配置 cpmpat:true;
          // 经多个不同环境测试,开启此项有可能报错:Maximum call stack size exceeded
          // 可禁用此项
          selfDefending: false,
          // 控制流平坦化,将一些逻辑处理块都统一加上一个前驱逻辑块,每个逻辑块都由前驱逻辑块进行条件判断和分发,构成一个个闭环逻辑,导致整个执行逻辑十分复杂难读。但会导致代码执行效率变慢,最多慢1.5倍。可以使用 controlFlowFlatteningThreshold 这个参数来控制比例,取值范围是 0 到 1,默认 0.75
          controlFlowFlattening: false,
          // 禁用控制台输出, 通过用空函数替换它们来禁用console
          disableConsoleOutput: true,
          // 调试保护,开启后开发者工具进去无限debug模式
          debugProtection: true,
          // 域名锁定,锁定混淆的源代码,使其仅在特定域和/或子域上运行,使用后发现会出问题,慎用
          domainLock: ['http://bzxx.ahbz.org.cn'],
          // 字符串混淆,none或'base64'、'rc4'两种
          stringArrayEncoding: ['base64'],
          // 删除字符串文字并将它们放在一个特殊的数组中
          stringArray: true,
          // 变量名混淆,标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
          identifierNamesGenerator: 'hexadecimal',
          // 对象键名替换,允许启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,并且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。
          transformObjectKeys: true,
          // 注入无意义代码并控制比例
          deadCodeInjection: false,
          deadCodeInjectionThreshold: 0.2
        },
        [] // 数组中写不需要混淆的文件名,如:app.js
      ])
    })

    config.when(process.env.NODE_ENV === 'development', config => {
      config.entry.app = ['babel-polyfill', './src/mian.js']
      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    })
  }
}