В моих сценариях представления я добавляю javascript с помощью помощника представления inlineScript и повторяю его в нижнем колонтитуле моего шаблона. Теперь я пытаюсь минимизировать сгенерированный html с помощью это решение.
Моя проблема в том, что я включаю встроенные комментарии (например, //this is a comment) в свой код (поскольку я хороший разработчик), что приводит к тому, что весь следующий код также рассматривается как комментарий (поскольку все новые строки удаляются, а следующий код помещается в та же строка, что и встроенный комментарий).
inlineScript, чтобы удалить комментарии и / или минимизировать код, используя, например, mrclay minify?Что-то, что я пробовал, было:
<?php echo preg_replace('#//.*#', '', $this->inlineScript()) ?>
Это вызывает проблемы на страницах, где у меня есть код, например:
jQuery(el).attr('data-toggle', 'popover')
.attr('data-trigger', 'hover')
.attr('data-html', 'true')
.attr('data-content', [
'<img style = "height: 75px; border: 1px solid #000; margin: 5px" src = "',
'//' + location.hostname + '/img/broker-logo/' + el.value,
'"/>'
].join(''))
И вариант выше,
<?php echo preg_replace('#[\s\t]+//.*#', '', $this->inlineScript()) ?>
Которая проверяет комментарии к тем, у которых нет ничего перед этим. Это вызывает проблемы, когда у меня есть код, за которым следует комментарий в конце строки:
var $el = jQuery('table.hover') //only apply effect to hover tables
что приводит к тому же нежелательному результату, что и исходный выпуск.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете добавить https://github.com/mrclay/jsmin-php, чтобы удалить комментарии и пробелы (см. Вопрос https://github.com/mrclay/minify/issues/581 относительно комментариев).
Если вы используете проект композитора, вы можете добавить jsmin-php в свой проект следующим образом:
1 шаг: Запустите composer require mrclay/jsmin-php в терминале, где находится ваш composer.json, чтобы установить пакет.
2 шаг: Добавьте в свою реализацию функции минификации скрипта строку с JSMin::minify, которая будет удалять комментарии:
function removeComments(string $code) {
// $code is variable that contains JS with comments, could be something like
// $code = 'var someCode = "blah-blah";/**comment*/';
$minifiedJs = JSMin::minify($code);
return $minifiedJs;
}
3 шаг: Не забудьте добавить инструкцию use JSMin\JSMin; поверх вашего .php файла.
В вашем случае вы назовете его как removeComments($this->inlineScript()), если inlineScript () действительно возвращает вам строку. Как замечание, обычно вспомогательный метод inlineScript должен называться следующим образом
$jsCodeWithoutComments = removeComments($jsCodeWithComments);
$this->inlineScript()->appendScript($jsCodeWithoutComments);
См. Добавить файл Javascript в конец коллекции InlineScript из дочернего представления
Вот и все.
Пятно на. В моем макете мой последний код -
<?php echo \JSMin::minify($this->inlineScript()->toString()) ?>