Удалите символы новой строки из минимизированного файла JSMin и ошибку синтаксического анализа при условии IF - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь на лету минимизировать файл javascript с помощью php и JSMin. Все отлично работает, но когда я пытаюсь удалить переводы строки

$jsMinifiedClean = str_replace( array("\r","\n"),"",$jsMinified);

Я получаю ошибку разбора JavaScript. После быстрого поиска по коду я обнаружил проблему:

if( condition ) statement
else statement;

Условие "if" не имеет символа ";" в конце строки.

Почему при ручном сжатии кода YUI я не получаю ошибку? Точка с запятой действительно обязательна в конце if, чтобы избежать проблемы сжатия с помощью JSMin?

1 Ответ

1 голос
/ 29 сентября 2011

Точка с запятой действительно обязательна в конце if, чтобы избежать проблемы сжатия с JSMin?

Это если вы удалите новую строку. По умолчанию JSMin не удаляет символ новой строки именно по этой причине, ужас - автоматическая вставка точки с запятой . Со страницы JSMin :

Это более консервативный способ пропустить перевод строки, потому что перевод строки иногда рассматривается как точка с запятой. Перевод строки не опускается, если он предшествует не-ASCII-символу или букве ASCII или цифре или одному из следующих символов:

\ $ _ { [ ( + -

и если он следует за не-ASCII-символом или буквой или цифрой ASCII или одним из следующих символов:

\ $ _ } ] ) + - " '

Если вы затем удалите символ новой строки, вы берете на себя обязательство быть уверенным, что символ новой строки не имеет значения из-за ASI.

...