Как решить JS массив объектов минимизировать проблему? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть файл js, который содержит один массив объектов.

testsripts.js

[
   {action: t.message, text: ' ==== Test form insertions === \nInserting forms.... \n'}
]

когда я уменьшил этот файл с помощью uglifier, я получаю похожий результат следующим образом.

testsripts.min.js

t.message;

Как это решить.

(вышеприведенные сценарии сокращены для простоты)

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Все, что у вас есть, это массив, ссылка на который нигде не сохраняется. Таким образом, вместо создания массива, который будет немедленно собирать мусор, UglifyJS оценивает ваш код на наличие возможных побочных эффектов и минимизирует ваш код, чтобы выполнялись выражения с побочными эффектами (а остальные отбрасывались).

Свойство text имеет только простой строковый литерал в качестве значения, которое не может иметь побочных эффектов, поэтому оно отбрасывается. Значение action равно t.message, что может вызвать побочные эффекты, если message является геттером. Таким образом, минимизированный результат - просто t.message; и ничего больше.

Один из вариантов - объявить переменную, чтобы гарантировать сохранение ссылки на массив:

const arr = [
  {action: t.message, text: ' ==== Test form insertions === \nInserting forms.... \n'}
];

Вывод, вы можете проверить здесь :

const arr=[{action:t.message,text:" ==== Test form insertions === \nInserting forms.... \n"}];
0 голосов
/ 30 августа 2018

Попробуйте назначить значение для объекта отдельно.

Заменить

[
   {action: t.message, text: ' ==== Test form insertions === \nInserting forms.... \n'}
]

С

var myarray=[];
var obj={};
obj.action=t.message;
obj.text=" ==== Test form insertions === \nInserting forms.... \n";
myarray.push(obj);
...