在PHP中使用YUICompressor或类似工具?

8
我一直在我的测试服务器上使用yuicompressor.jar来实现JavaScript文件的即时压缩。现在我已经将网站部署到公共服务器上,我注意到服务器的策略禁止使用exec()或其等效物,所以我不能再执行java了。
有没有一个像yuicompressor这样在PHP中实现的不错的即时JS压缩器?我能找到的唯一类似于这个的东西是Minify,但它更像是一个全面的压缩解决方案,带有缓存和其他功能。我想保持文件分开,并让压缩后的文件遵循我的命名约定,因此Minify对于这个目的来说有些复杂。
像yuicompressor一样,该工具应该能够接受文件名或JavaScript作为输入,并应该将压缩后的JavaScript写入文件或输出。
编辑:为了澄清,我正在寻找一些不必作为独立程序使用的东西(即它可以从函数中调用,而不是嗅探我的GET变量)。如果我只想要一个压缩器,显然Minify是一个好选择。
编辑2:在我提出这个问题的五年里发生了很多变化。今天我强烈建议将前端工作流程与服务器代码分开。有很多优秀的JS开发工具可供使用,除了最简单的jQuery增强功能外,最好还是有一个完整的工作流程,包括自动捆绑、测试和检查,并只部署压缩后的捆绑文件而不是原始文件。
3个回答

6

是的,有一种叫做 minify 的工具。

唯一需要担心的复杂性就是设置一个组(group),但实际上也没什么难度。如果您想在一个<script><link>语句中使用多个JS/CSS,请编辑groupsConfig.php文件:

return array(
     'js-common' => array('//js/jquery/jquery-1.3.2.min.js', '//js/common.js', '//js/visuals.js',
'//js/jquery/facebox.js'),
     'css-common' => array('//css/main.css', '//css/layout.css','//css/facebox.css')
);

要包含上述“js-common”组,请执行以下操作:
<script type="text/javascript" src="/min/g=js-common"></script>

1
就像我说的一样,我找不到在应用程序内运行minify的方法。它甚至期望设置某些GET参数而不是将文件名作为参数。这可能很好,但不是我要找的。 - Alan Plum
Minify并不复杂。您可以通过使用类似于<script type="text/javascript" src="/min/f=somefile"></script>的东西来简单地缩小特定文件。 - karim79
1
从“API”角度来看,它非常复杂。实际上,它并没有真正的API。它是一个独立的工具,用于读取超级全局变量作为输入。如果您可以指引我使用一个包装器在应用程序中使用Minify,那将是一个有效的选择。 - Alan Plum
2
@Alan - Minify基于一堆类,这些类都可以从你的应用程序中使用。例如,这个:http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/HTML.php 我不是在追求声望,因为我今天已经达到上限了。只是想帮忙 :) - karim79
显示剩余2条评论

3
(我知道我也在寻找完全相同的东西,不知道如何直接使用php处理jar文件 - 这就是我来到这里的原因,所以我分享我发现的内容)

Minify是一个拥有大量功能的庞大库。然而,缩小部分是一个非常小的类:http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/YUICompressor.php

而且非常容易使用:

//set the path to the jar file
Minify_YUIcompressor::$jarFile=_ROOT.'libs/java/yuicompressor.jar';
//set the path to a writable temp folder
Minify_YUIcompressor::$tempDir=_ROOT.'temp/';

//minify
$yourcssminified=Minify_YUIcompressor::minifyCss($yourcssstringnotminified,$youroptions)

对于js来说,同样的过程,如果您需要更多功能,请从库中选择并阅读源代码,看看如何可以直接从您的应用程序进行调用。

由于minify基于使用jar文件,因此我没有好好阅读问题,op无论如何都不能在他的服务器配置中使用它。

Minify还包括其他缩小方法,例如:

http://code.google.com/p/minify/source/browse/trunk/min/lib/JSMinPlus.php?r=443&spec=svn468


你提供的第一个链接对我来说无法使用。我使用了https://code.google.com/p/minify/source/browse/min/lib/Minify/YUICompressor.php。 - Aust

0

试试Lissa

Lissa是一个通用的CSS和JavaScript加载工具。Lissa是YUI PHP Loader的扩展,旨在解决当前加载器的限制之一; 组合加载。 YUI PHP Loader附带了一个组合加载器,能够通过将所有YUI JavaScript和/或CSS要求作为每种资源类型的单个请求输出来减少HTTP请求并提高性能。这意味着即使您需要8个YUI组件,最终归结为13个文件,您仍然只会进行2个HTTP请求; 一个用于CSS,另一个用于JavaScript。这很好,但是自定义非YUI资源怎么办?YUI PHP Loader将它们加载,但是它们作为单独的包含加载,因此它们错过了组合服务的好处,并且页面的HTTP请求数量增加。 Lissa通过使用YUI PHP Loader处理YUI和/或自定义资源依赖关系的加载和排序,并与Minify配对来解决此限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接