【问题标题】:Looking for a CSS and for a js file merger and minimizer [closed]寻找 CSS 和 js 文件合并和最小化器 [关闭]
【发布时间】:2012-03-26 21:22:16
【问题描述】:

我正在从事一个公共项目,我们正在做的事情之一是 CSS 文件合并和最小化器以及 js 文件合并和最小化器。 要求如下:

  • 没有测试代码。只有稳定的代码。
  • 必须用 php 编写。
  • 必须在 php 5.4 中工作。
  • 必须兼容php 5.3
  • CSS 最小化程序可能与 js 最小化程序完全不同(不一定是二合一)
  • 最小化的结果必须在一定程度上起作用,以便可以将其转储到文件中。浏览器仅访问转储文件。这必须能够处理大量工作,如此缩小,很棒的工具,但不是一种选择。

如果系统只是一个最小化器,我可以自己在服务器中进行合并(字符串连接)并稍后使用最小化器。

当有新的东西要压缩时,我会使用我想要压缩 js 或 CSS 时调用的系统(例如类、函数等)。它的输出应该放在一个文件中,所以如果它的输出可以直接进入一个文件很棒(!),如果它只是一个返回给程序的字符串,很好(!)我的程序是知道什么时候压缩的文件应该被替换,并且是处理文件访问权限的人。

这是一个项目,它必须在 php 的所有外部通信都被禁用并且大多数功能被禁用的地方听起来有点像。这意味着没有 url 包含,没有 curl,没有 url file_get_contents(),没有 exec() 等等......

注意:这个网站上有很多关于这个主题的问题。问题是他们中的大多数都是通才而不是回答我需要的东西(例如:对建议 YUI 或目前已知有错误的压缩器更感兴趣)。

我已经尝试在互联网上找到这个,但我只能找到旧的废弃项目,或者我得到需要使用命令行界面的压缩器。

【问题讨论】:

    标签: php compression minify jscompress


    【解决方案1】:

    对于 CSS,我个人使用 CSSMin 效果很好。它是一个简单的 PHP 解决方案,它甚至能够模拟 CSS 变量,带有@variable 声明。

    对于 JS 文件,我用curl 调用Google Closure Compiler,这不能满足您的需求。

    【讨论】:

    • 嗯...当 curl 可用时,我可以使用 GCC。 CSSMin 看起来不错...
    【解决方案2】:

    如果您想摆脱 CLI,最好的选择可能是使用在线工具(使用 cURL 访问它)或基于 Java 的工具(使用 exec() 方法)。

    您似乎更愿意使用基于 Web 的东西,为此我推荐 UglifyJS 用于 Javascript 文件,Prefixr 用于 CSS。

    请注意,Prefixr 默认不会压缩输入:它的重点是为最新的 CSS 属性添加供应商前缀(这在当今是必不可少的)。但是通过发送一个 POST 参数 'compress_option' 你会得到压缩的输出。无论如何,由于 [Prefixr 的 API 使用页面][5] 没有提供 PHP cURL 示例,因此您可以:

    $concatenated_content = '.any_css {color: #000;}';
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "http://prefixr.com/api/index.php");
    curl_setopt($curl, CURLOPT_POSTFIELDS, array('css' => $concatenated_content, 'compress_option' => 'on'));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $compressed_content = curl_exec($curl);
    curl_close($curl);
    

    如果您想使用本地工具,我推荐 YUI 压缩器 (http://developer.yahoo.com/yui/compressor/) 和 Google Closure (https://developers.google.com/closure/,仅用于 JS,Google Closure Stylesheets 在我看来还不成熟)。在这种情况下,您可以使用上面提到的 PHP exec() 函数,CLI 不会伤害您。

    【讨论】:

    • 我需要添加到问题中的许多细节...... exec() 通常被禁用,所以不是一个选项。许多服务器都有 curl,但有相当多的服务器禁用了它,所以也不是一个选项。
    • 我建议你在开发环境中做这个过程。除了可以完全访问 PHP 函数之外,编译、生成时间戳/版本化文件然后将其部署到所有服务器似乎是一个很好的流程。如果您打算稍后扩展或使用 CDN,如果您继续在服务器环境中自动编译这种想法,事情会变得更加复杂。
    • 我正在开发的程序应该可以在免费服务器中使用。免费服务器已禁用 exec。那是通常的东西。在这个项目中也有一个规则。不要 100% 依赖外部的东西。期间
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多