запретить замену обозначения распространения объектов ES6 в Terser - PullRequest
0 голосов
/ 12 марта 2020
!((
    input,
    processed = {
        foo: 1,
        ...input
    }
) => {
    window.console.log(processed)
})({
    bar: 2  // input configuration
})

сводится к:

((t, e = {
    foo: 1,
    bar: 2
}) => {
    window.console.log(e);
})();

Мне нужен этот параметр input для последующей конфигурации

Вопрос : Как сохранить исходный шаблон?

Мне нужен выход Terser:

((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
});

1 Ответ

0 голосов
/ 12 марта 2020

Terser позаботится о текущей версии вашего кода. Прямо сейчас вы передаете постоянный параметр в функцию, поэтому 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...