Я хочу использовать 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"] ?>');
Это не сработает. Вы должны определить все свои функции в простых файлах .js, а затем любые динамические значения или вызовы функций на вашей странице PHP. Помимо возможности сжатия, он позволит вашим файлам .js правильно кэшироваться браузером.
Отвечать самому себе:
Ответ 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"] ?>';
не нужно изменять. Вам остается только не использовать одиночные или двойные кавычки как для объявления строки строки, так и для строк в PHP-коде.