Сократить InlineScript - PullRequest
0 голосов
/ 24 мая 2018

В моих скриптах вида я добавляю 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

, который приводит к тому же нежелательному результату, что и исходная проблема.

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете добавить 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 из дочернего представления

Тоэто так.

...