Использование YUI Compressor для файлов JavaScript, содержащих PHP - PullRequest
1 голос
/ 10 июня 2011

Я хочу использовать YUI Compressor для файлов JavaScript, которые содержат код PHP, например:

<?php $include 'headerDefinitions.js.php'; ?>
function hello(name) {
    alert('Hello ' + name);
}
hello('<?= $_GET["name"] ?>');

Это, очевидно, приводит к ошибкам при работе через компрессор yui, например:

java -jar yui-compressor.jar --type js -o target-file.js.php source-file.js.php

потому что компрессор предполагает, что даже часть PHP - это JavaScript.Есть ли способ сжать JavaScript при сохранении и игнорировании частей PHP?Так что приведенный выше пример приводит к:

<?php $include 'headerDefinitions.js.php'; ?>function hello(a){alert('Hello '+a)}hello('<?= $_GET["name"] ?>');

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Это не сработает. Вы должны определить все свои функции в простых файлах .js, и тогда любые динамические значения или вызовы функций будут на вашей странице PHP. Помимо разрешения сжатия, он позволит правильно кэшировать ваши файлы .js браузером.

0 голосов
/ 10 июня 2011

Чтобы ответить себе:

Ответ jiggys на отделение JavaScript от PHP, вероятно, является наиболее чистым, и его следует придерживаться, когда это возможно.Но иногда это невозможно.В моем случае я не могу разделить PHP и JavaScript, не тратя огромное количество времени (это старый и большой проект).

В любом случае, YUI Compressor не обрабатывает комментарии JavaScript, начинающиеся с /*!, поэтомуключ заключается в том, чтобы заключить PHP-код в блок комментария следующим образом:

/*!
 <?php $include 'headerDefinitions.js.php'; ?> */
function hello(name) {
    alert('Hello ' + name);
}
hello('<?= $_GET["name"] ?>');

Вот и все.При просмотре в браузере будет пустой блок комментариев, но его можно пренебречь или заполнить некоторой информацией об авторских правах.

PHP-код в строках JavaScript не требует дальнейшего внимания, поскольку они (очевидно) остаются нетронутыми во время сжатияпроцесс:

var myString = '<?= $_GET["name"] ?>';

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

...