Vue CLI 为生产环境进行了缩减,但如何缩短属性和其他定义呢?
Vue CLI minifies for production, but how can properties and other definitions also be shortened?
我查看了 Vue CLI 生成的输出文件(例如 app.4a7888d9.js)以查看实际减少的内容,我看到 'data' 对象中声明的属性,声明的方法方法对象等保留其原始名称。与 Vuex 状态属性相同。
我并没有试图完全混淆我的代码,但我确实使用了相当长的描述性名称,这可能有助于缩小。请不要讨厌,但我有一个 属性 名称的最坏情况示例是 scheduledTransactionConditionActiveComponent
除了 cli 默认执行的操作之外,还有更好的方法来实现缩小吗?如果我应该为此使用不同的包,是否有经过验证的 vue 包?
Vue CLI 使用 terser-webpack-plugin
进行缩小,property mangling is disabled by default。你可以在你的 Vue 配置中启用它,如下所示:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.optimization.minimizer('terser').tap(args => {
const opts = args[0]
opts.terserOptions.mangle = {
...opts.terserOptions.mangle,
properties: true, // mangle all property names
}
return args
})
}
}
Terser 文档还推荐选择性 属性 重整(例如,仅将其应用于 names that match a regexp
)。例如,您可以将 Terser 配置为仅处理以下划线结尾的属性:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.optimization.minimizer('terser').tap(args => {
const opts = args[0]
opts.terserOptions.mangle = {
...opts.terserOptions.mangle,
properties: {
regex: /_$/, // mangle property names that end with "_"
},
}
return args
})
}
}
注意:虽然这对数据道具很有效,但这种修饰不适用于组件名称(即 components
下的 属性 个名称)。
我查看了 Vue CLI 生成的输出文件(例如 app.4a7888d9.js)以查看实际减少的内容,我看到 'data' 对象中声明的属性,声明的方法方法对象等保留其原始名称。与 Vuex 状态属性相同。
我并没有试图完全混淆我的代码,但我确实使用了相当长的描述性名称,这可能有助于缩小。请不要讨厌,但我有一个 属性 名称的最坏情况示例是 scheduledTransactionConditionActiveComponent
除了 cli 默认执行的操作之外,还有更好的方法来实现缩小吗?如果我应该为此使用不同的包,是否有经过验证的 vue 包?
Vue CLI 使用 terser-webpack-plugin
进行缩小,property mangling is disabled by default。你可以在你的 Vue 配置中启用它,如下所示:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.optimization.minimizer('terser').tap(args => {
const opts = args[0]
opts.terserOptions.mangle = {
...opts.terserOptions.mangle,
properties: true, // mangle all property names
}
return args
})
}
}
Terser 文档还推荐选择性 属性 重整(例如,仅将其应用于 names that match a regexp
)。例如,您可以将 Terser 配置为仅处理以下划线结尾的属性:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.optimization.minimizer('terser').tap(args => {
const opts = args[0]
opts.terserOptions.mangle = {
...opts.terserOptions.mangle,
properties: {
regex: /_$/, // mangle property names that end with "_"
},
}
return args
})
}
}
注意:虽然这对数据道具很有效,但这种修饰不适用于组件名称(即 components
下的 属性 个名称)。