当babel-loader和webpack UglifyJS一起使用时,babel会先对代码进行处理,然后编译后的代码会进入webpack进行打包和优化操作。 使用扩展运算符...时webpack loader 调试,不同的情况会有不同的处理。 当在函数参数中使用时,会被编译成arguments,当带参数调用时,会被编译成apply,如下:
function debug(...args) { console.log(...args) }
将被编译为:
function debug() {
var e
(e = console).log.apply(null, arguments)
}
这是一种非常奇怪的解释方式。 为什么使用额外的 e 变量来隔离控制台和日志? 如果这样编译,结果自然不会被UglifyJS识别webpack loader 调试,drop_console等选项也不会生效。 解决办法是在调用函数的时候直接使用apply。
function debug(...args) { console.log.apply(null, args) }
因为没有使用扩展运算符,所以编译时不会形成之前奇怪的分割代码,并且会正常被UglifyJS优化。