防止替换 Terser 中的 ES6 对象传播符号
prevent replacing ES6 Object spread notation in Terser
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})({
bar: 2 // input configuration
})
缩小为:
((t, e = {
foo: 1,
bar: 2
}) => {
window.console.log(e);
})();
我需要那个 input
参数用于以后的配置
问题:如何保持原有格局?
我需要更简洁的输出:
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({bar: 2});
评论后更新:
let input1 = { bar:2 }
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})( input1 )
输出:
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({
bar: 2
});
Terser 将处理您代码的当前版本。现在,您正在将一个常量参数传递给一个函数,因此 terser 可以直接将其内联以防止创建中间对象。
如果将来您在函数内部(对于原始值)或函数外部(对于对象)更改此参数,则 terser 应该能够识别并且不再内联。
令人惊讶的是,已经将参数声明为变量似乎给了简洁的正确提示,正如 OP 所发现的:
let input1 = { bar:2 }
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})( input1 )
将导致
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({
bar: 2
});
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})({
bar: 2 // input configuration
})
缩小为:
((t, e = {
foo: 1,
bar: 2
}) => {
window.console.log(e);
})();
我需要那个 input
参数用于以后的配置
问题:如何保持原有格局?
我需要更简洁的输出:
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({bar: 2});
评论后更新:
let input1 = { bar:2 }
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})( input1 )
输出:
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({
bar: 2
});
Terser 将处理您代码的当前版本。现在,您正在将一个常量参数传递给一个函数,因此 terser 可以直接将其内联以防止创建中间对象。
如果将来您在函数内部(对于原始值)或函数外部(对于对象)更改此参数,则 terser 应该能够识别并且不再内联。
令人惊讶的是,已经将参数声明为变量似乎给了简洁的正确提示,正如 OP 所发现的:
let input1 = { bar:2 }
!((
input,
processed = {
foo: 1,
...input
}
) => {
window.console.log(processed)
})( input1 )
将导致
((t, e = {
foo: 1,
...t
}) => {
window.console.log(e);
})({
bar: 2
});