vue2 混淆打包
- Vue
- 10分钟前
- 2 热度
- 0 评论
"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
})
})
}
}