对于webpack压缩代码的这两个配置drop_console和pure_funcs有什么区别(仅针对下面的代码),如果同时使用会重复吧
我理解第一个已经把所有console给删除了,再配置pure_funcs: ['console.log']这个没有意义了吧,有大佬解答一下吗
compress: {
drop_console: true,
pure_funcs: ['console.log']
}
对于webpack压缩代码的这两个配置drop_console和pure_funcs有什么区别(仅针对下面的代码),如果同时使用会重复吧
我理解第一个已经把所有console给删除了,再配置pure_funcs: ['console.log']这个没有意义了吧,有大佬解答一下吗
compress: {
drop_console: true,
pure_funcs: ['console.log']
}
drop_console
和 pure_funcs
在 Webpack 的压缩配置中(通常是配合 UglifyJsPlugin 或 TerserPlugin 使用)确实都用于去除代码中的 console
语句,但它们的工作方式有所不同,而且在某些情况下同时使用可能并不会造成“重复工作”,但它们确实可能有一些重叠的效果。
drop_console
drop_console
是一个简单的选项,当设置为 true
时,它会移除所有的 console
语句,无论其形式如何(例如 console.log
, console.error
, console.warn
等)。它不需要你明确指定要删除的 console
函数,因为它会删除所有。
pure_funcs
pure_funcs
是一个更灵活的选项,它允许你指定一个或多个函数,这些函数在被调用且其返回值未被使用时,会被视为无副作用的,并因此从压缩后的代码中移除。对于 console.log
,这意味着任何单独的 console.log
调用(其返回值未被使用)都会被移除。但是,pure_funcs
不仅仅限于 console.log
;你可以添加任何你认为无副作用的函数。
同时使用
当 drop_console
和 pure_funcs: ['console.log']
同时使用时,drop_console
会移除所有的 console
语句,而 pure_funcs
只会移除那些单独的 console.log
调用(其返回值未被使用)。因此,对于 console.log
来说,drop_console
会更加彻底地移除所有相关代码,而 pure_funcs
在这种情况下可能看起来是多余的。
然而,如果你的代码中包含其他类型的 console
语句(如 console.error
或 console.warn
),那么 drop_console
仍然会移除它们,而 pure_funcs: ['console.log']
则不会。另外,如果你在未来决定保留某些 console.log
调用(例如用于调试目的),你可以通过调整 pure_funcs
数组来实现,而不必关闭整个 drop_console
选项。
总结
drop_console
会移除所有 console
语句,无论其形式如何。pure_funcs
允许你更精细地控制哪些无副作用的函数调用应该被移除。console.log
来说,drop_console
会覆盖 pure_funcs
的效果,但 pure_funcs
可以用于控制其他无副作用的函数调用。console
语句,那么只使用 drop_console
就足够了。2 回答1k 阅读✓ 已解决
1 回答558 阅读
在 Webpack 的 TerserPlugin(通常用于压缩 JavaScript 代码)中,drop_console 和 pure_funcs 是两个与代码压缩和删除相关的选项。不过,这两个选项在处理 console 相关的函数时,有一些细微的差别和用途。
两者同时使用会重复吗?
如果你同时设置了 drop_console: true 和 pure_funcs: ['console.log'],那么 drop_console 会删除所有 console 相关的函数调用,而不仅仅是 console.log。同时,pure_funcs 也会尝试删除未使用的 console.log 调用,但在这个上下文中,由于 drop_console 已经删除了所有 console 调用,所以 pure_funcs 的这个特定设置将不会起到任何额外的作用。
但是,如果你有其他纯函数在 pure_funcs 数组中,并且这些函数没有被 drop_console 涵盖,那么 pure_funcs 仍然会起到作用。
总结