在包含PHP的JavaScript文件上使用YUI Compressor

时间:2011-06-10 13:37:36

标签: php javascript compression yui

我想在包含PHP代码的JavaScript文件上使用YUI Compressor,例如:

<?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。有没有办法在保留和忽略PHP部分的同时压缩JavaScript?所以上面的例子导致:

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

2 个答案:

答案 0 :(得分:3)

它无效。您应该在普通的.js文件中定义所有函数,然后在PHP页面上进行任何动态值或函数调用。除了允许压缩之外,它还允许浏览器正确缓存您的.js文件。

答案 1 :(得分:0)

回答自己:

jiggys对PHP的单独JavaScript的回答可能是最干净的,应尽可能遵循。但有时候这是不可能的。在我的情况下,我不能在不花费大量时间的情况下划分PHP和JavaScript(这是一个古老而又大的项目)。

无论如何,YUI Compressor并没有删除以/*!开头的JavaScript注释,因此关键是将PHP代码包含在注释块中,如下所示:

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

这就是全部。在浏览器中查看时会有一个空的评论栏,但可以忽略或填写一些版权信息。

JavaScript字符串中的PHP代码不需要进一步关注,因为它们(显然)在压缩过程中保持不变:

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

不需要修改。您只需要注意不要在JavaScript代码中使用单引号或双引号来表示JavaScript字符串声明和字符串。