Минимизировать InlineScript

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
433
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить 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()) ?>

Richard Parnaby-King 10.07.2018 10:35

Другие вопросы по теме