tubalmartin/cssmin

YUI CSS压缩器的PHP版本

v4.1.1 2018-01-15 15:26 UTC

README

Latest Stable Version Total Downloads Daily Downloads License

此版本基于2013年6月12日的YUI压缩器2.4.8版本。
此版本包含了一些原始YUI压缩器中不存在的修复和功能。

目录

  1. 安装与需求
  2. 如何使用
  3. 测试
  4. API参考
  5. 谁在使用此库?
  6. 变更日志

1. 安装与需求

安装

使用Composer将库包含到您的项目中

$ composer.phar require tubalmartin/cssmin

需要Composer的自动加载文件

<?php

require './vendor/autoload.php';

use tubalmartin\CssMin\Minifier as CSSmin;

// Use it!
$compressor = new CSSmin;

需求

  • PHP 5.3.2或更高版本,并包含PCRE扩展。

2. 如何使用

您可以使用以下三种方式使用此库

  1. PHP
  2. CLI
  3. GUI

PHP

<?php

// Autoload libraries
require './vendor/autoload.php';

use tubalmartin\CssMin\Minifier as CSSmin;

// Extract the CSS code you want to compress from your CSS files
$input_css = file_get_contents('test.css');

// Create a new CSSmin object.
// By default CSSmin will try to raise PHP settings.
// If you don't want CSSmin to raise the PHP settings pass FALSE to
// the constructor i.e. $compressor = new CSSmin(false);
$compressor = new CSSmin;

// Set the compressor up before compressing (global setup):

// Keep sourcemap comment in the output.
// Default behavior removes it.
$compressor->keepSourceMapComment();

// Remove important comments from output.
$compressor->removeImportantComments();

// Split long lines in the output approximately every 1000 chars.
$compressor->setLineBreakPosition(1000);

// Override any PHP configuration options before calling run() (optional)
$compressor->setMemoryLimit('256M');
$compressor->setMaxExecutionTime(120);
$compressor->setPcreBacktrackLimit(3000000);
$compressor->setPcreRecursionLimit(150000);

// Compress the CSS code!
$output_css = $compressor->run($input_css);

// You can override any setup between runs without having to create another CSSmin object.
// Let's say you want to remove the sourcemap comment from the output and
// disable splitting long lines in the output.
// You can achieve that using the methods `keepSourceMap` and `setLineBreakPosition`:
$compressor->keepSourceMapComment(false);
$compressor->setLineBreakPosition(0);
$output_css = $compressor->run($input_css); 

// Do whatever you need with the compressed CSS code
echo $output_css;

CLI

安装后,将在./vendor/bin文件夹中创建一个名为cssmin的二进制文件。

输出帮助

./vendor/bin/cssmin -h

将压缩结果输出到命令行

./vendor/bin/cssmin -i ./my-css-file.css

将压缩结果输出到另一个文件

./vendor/bin/cssmin -i ./my-css-file.css -o ./my-css-file.min.css

将压缩结果输出到另一个文件,并保留输出中的源映射注释

./vendor/bin/cssmin -i ./my-css-file.css -o ./my-css-file.min.css --keep-sourcemap

查看二进制帮助以获取所有可用的CLI选项。

GUI

我们制作了一个简单的基于Web的GUI来使用压缩器,它位于gui文件夹中。

GUI功能

  • 在压缩前可选地使用实时LESS编译,并包含错误报告。
  • 对库的完全控制。

如何使用GUI

  • 您需要一个安装了PHP 5.3.2+的服务器。
  • 下载仓库并将其上传到服务器中的一个文件夹。
  • 在项目根目录中运行php composer.phar install以安装依赖项。
  • 打开您喜欢的浏览器,并输入/gui文件夹的URL。

3. 测试

YUI压缩器的测试已经修改以适应此版本。

如何运行测试套件

  • 在项目根目录中运行php composer.phar install以安装依赖项。phpunit将本地安装。
  • 之后,在命令行中运行phpunit
./vendor/bin/phpunit

PHPUnit的diffing太简单了,所以当测试失败时,很难看到实际的diff。因此,我创建了一个测试运行器,它可以显示失败测试的彩色inline diff。一次只能运行一个测试。

以下是使用方法:

./tests/bin/runner -t <expectation-name> [-f <fixture-name>] [--keep-sourcemap] [--remove-important-comments] [--linebreak-position <pos>]

4. API参考

__construct ([ bool $raisePhpLimits ])

类构造函数,创建一个新的CSSmin对象。

参数

raisePhpLimits

如果为TRUE,CSSmin将尝试提高某些PHP配置选项的值。设置为FALSE以保留PHP配置选项的值。默认为TRUE。

run (string $css)

压缩未压缩的CSS代码字符串。可以在单个CSSmin实例上多次调用run()

参数

css

未压缩的CSS代码字符串。CSSmin默认值:''(空字符串)。

返回值

压缩的CSS代码字符串,或者如果没有传入字符串,则为空字符串。

keepSourceMapComment (bool $keepSourceMap)

设置是否在输出中保留源映射注释/*# sourceMappingURL=<path> */
CSSmin默认行为:源映射注释将从输出中删除。

removeImportantComments (bool $removeImportantComments)

设置是否从输出中删除重要注释。
CSSmin默认行为:声明块外的注释会保留在输出中。

setLinebreakPosition (int $position)

一些源代码控制工具不喜欢检查包含超过8000个字符的行的文件。在这种情况下,行断选项用于在特定列后拆分长行。

CSSmin默认值:0(所有CSS代码在一行中)。
支持的最低值:1

setMaxExecutionTime (int $seconds)

设置此脚本的max_execution_time配置选项

CSSmin默认值:60
值和说明:max_execution_time文档

setMemoryLimit (mixed $limit)

设置此脚本的memory_limit配置选项

CSSmin默认值:128M
值和说明:memory_limit文档

setPcreBacktrackLimit (int $limit)

设置此脚本的pcre.backtrack_limit配置选项

CSSmin默认值:1000000
值和说明:pcre.backtrack_limit文档

setPcreRecursionLimit (int $limit)

设置此脚本的pcre.recursion_limit配置选项。

CSSmin默认值:500000
值和说明:pcre.recursion_limit文档

5. 使用此端口的用户

  • Magento 电子商务平台和在线销售解决方案。
  • Minify 是一个HTTP内容服务器。它压缩内容源(通常是文件),合并结果并以适当的HTTP头提供服务。
  • Autoptimize 是一个Wordpress插件。Autoptimize可以加快您的网站速度,并通过聚合和最小化JS、CSS和HTML来帮助您节省带宽。
  • IMPRESSPAGES 带内容编辑器的PHP框架。
  • 其他依赖的Composer包.

6. 更新日志

v4.1.1 2018年1月15日

修复

  • 修复:在压缩带有分号和未引用URL的@-import规则时出现损坏 #45

v4.1.0 2017年5月16日

  • 新增
    • CLI参数--dry-run执行 dry run 并显示统计信息。
  • 改进
    • 性能:代码分析后比v4.0.0快2倍
      • 1MB文件在PHP 5.3.29上需要1.8秒,在PHP 7.0.18上需要350ms(平均)。
      • 完整的Bootstrap v3.3.7 CSS套件在PHP 5.3.29上需要330ms,在PHP 7.0.18上需要50ms(平均)。

v4.0.0 2017年5月15日

新增

  • API
    • 移除:setChunkLength()方法和--chunk-length CLI参数。
    • 修改:keepSourceMap()方法现在命名为keepSourceMapComment()。CLI参数--keep-sourcemap保持不变,但我们还添加了--keep-sourcemap-comment
    • 修改:run()方法签名。现在它只接受一个参数。
    • 新增:removeImportantComments()方法和--keep-important-comments CLI参数。
  • 重要注释/*! ... */可以通过调用removeImportantComments()方法可选地从输出中删除。

v3.3.1 2017年5月16日

  • 将v4.1.0中做出的性能改进回滚到v3.3.1

v3.3.0 2017年5月13日

新增

  • CLI二进制文件在执行后会显示一些有用的统计信息。
  • 现在可以安全地压缩拼接的文件:@charset@import@namespace at规则将被正确放置。
  • 完全支持条件分组规则,即无限规则嵌套级别。之前仅支持一级嵌套。

注意事项

  • 因以下两个主要原因进行了较大的重构
    • 即使未事先测试潜在场景,也能使压缩输出更加可靠。
    • 由于逻辑简化,使开发、测试和贡献变得更简单。
  • 由于这次重构,不再需要样式表分块。出于向后兼容性的原因,setChunkLength 方法和 --chunk-length CLI 参数仍然存在,但没有任何效果。

v3.2.0 2017年5月10日

新增

  • PHPUnit 被添加为测试运行器。
  • 提供 CLI 二进制文件。
  • 支持 CSS 源映射特殊注释。
  • ms 单位压缩:从 300ms.3s
  • CSS3 短语双冒号伪元素现在缩短为单冒号(CSS2):从 ::after:after
  • background: nonebackground: transparent 缩短为 background:0 0

改进

  • 一些正则表达式。
  • 长行分割算法。
  • 将伪类、伪元素和函数转换为小写以覆盖更多情况。
  • 缩短具有重复值的合适缩写属性。现在已涵盖所有情况。
  • 测试。

修复

  • 在输出中分割长行时,如果注释或字符串包含闭合花括号 },则花括号可能被识别为选择器或规则结束花括号,从而导致意外添加换行。

v3.1.2 2017年4月17日

  • 改进了长命名颜色的压缩:现在所有长命名颜色都压缩为其较短的十六进制对应值。
  • 修复了例如 #39 的情况
  • 经过代码分析后,性能有了巨大提升。请参见下表,以查看运行整个测试套件的结果

使用的 PHP 版本:5.3.29

使用的 PHP 版本:7.0.8

v3.1.1 2017年4月11日

  • 正则表达式得到改进。
  • 小幅性能提升。
  • 移除了例如 @media 块等具有空规则的块。
  • 现在将引号不可选的属性选择器取消引号,例如从 col[class*="col-"]col[class*=col-]。覆盖了大多数常见情况。安全的方法。

v3.1.0 2017年4月9日

  • 对代码进行了深入研究。考虑到最大性能,从头开始重写了某些区域。压缩器行为没有变化。
  • 修复了在分析过程中发现的某些影响性能的隐藏错误。
  • 从最小化器逻辑中移除了针对 IE5/Mac 的注释漏洞。这些注释将不再保留。
  • 下表显示了与上一个版本相比,本版本中进行的性能优化

使用的 PHP 版本:5.3.29

使用的 PHP 版本:7.0.8

v3.0.0 2017年4月4日

  • 新的 API 符合 PSR-1、PSR-2 和 PSR-4。需要 PHP 5.3.2+。我认为是时候了!
  • 添加了许多测试,并进行了加强和修复。包括 Bootstrap 或 Foundation 等大型、实际生活中的样式表。
  • 修复了一些关键和次要问题,例如
    • 分块系统破坏了一些样式表(在规则块中破坏)或遗漏了一些内容。
    • 替换字符串中的回溯破坏了样式表。
    • #23
    • 其他...
  • 颜色压缩得到改进。现在支持所有命名颜色,即从 white#fff
  • 短值缩写功能已恢复,但以安全的方式,仅缩短分配给“安全”属性的值,即从 margin: 1px 0.0em 0rem 0% 缩短为 margin:1px 0 0。请查看代码以查看“安全”属性的列表。
  • paddingmargin 属性缩短到最简形式,即从 margin: 3px 2.1em 3px 2.1em 缩短为 margin:3px 2.1em
  • 强烈建议使用 PHP 5.3.2+ 的用户升级到 v3。

v2.4.8-p10 2017年4月4日

  • 这是 v2 的最后一个版本。从 v3 开始,将仅支持 PHP 5.3.2+。
  • 此补丁包含v3.0.0版本的所有改进和修复。有关更多信息,请参阅v3.0.0的注释(当然,本版本没有API更改)。
  • 强烈建议PHP版本低于5.3的用户更新到此补丁。

v2.4.8-p9 2017年3月28日

  • 将v2.4.8-p8中引入的带有标量表达式的属性声明回滚(PHP 5.6及以上版本),以支持PHP 5.0。压缩器行为没有变化。

v2.4.8-p8 2017年3月27日

  • 修复了#18问题
  • 添加了set_chunk_length方法。
  • boldnormal值分别压缩为700400,用于font-weight属性。
  • 更新了GUI。
  • 通过Composer加载FineDiff库。
  • 更新了README。

v2.4.8-p7 2017年3月26日

  • 修复了贡献者和其他人报告的许多问题#20#22#24#25#26。我相信至少到现在还没有人报告这些问题。抱歉大家等待了这么久。
  • 此次发布主要关注稳定性和可靠性,因此我不得不做出一些有争议的决定,比如
    • 不将none属性值压缩为0,因为在某些微妙的情况下,生成的输出可能会导致某些样式渲染不同。
    • 不删除零长度值中的单位,因为在许多情况下,输出将破坏预期的行为。在我看来,修复每个人发现的新破坏案例并不好,考虑到CSS是一个活生生的规范,浏览器在某些情况下存在差异。
  • 希望你们同意我删除这些冲突的部分。享受这次发布吧:)

v2.4.8-p6 2017年3月21日

  • 修复了PHP CLI问题。请参阅#36

v2.4.8-p5 2017年2月27日

  • 修复了PHP 7问题。

v2.4.8-p4 2014年9月22日

v2.4.8-p3 2014年4月26日

  • 修复了所有已报告的错误:请参阅问题#11#13(仅第一种情况)和#14
  • 将LESS编译器升级到版本1.7.0

v2.4.8-p2 2013年11月13日

  • 将块长度减少到5000个字符(以前为25000个字符),以避免PCRE回溯限制(需要反馈)。
  • 改进了@keyframes 0%步骤的bug。测试改进。
  • 修复了IE7在矩阵过滤器上的问题,浏览器接受矩阵参数之间的空白。
  • 将LESS编译器升级到版本1.4.2

v2.4.8-p1 2013年8月8日

  • 修复了@keyframes 0%步骤的bug。添加了测试。
  • 将LESS编译器升级到版本1.4.1