tubalmartin / cssmin
YUI CSS压缩器的PHP版本
Requires
- php: >=5.3.2
- ext-pcre: *
Requires (Dev)
- cogpowered/finediff: 0.3.*
- phpunit/phpunit: 4.8.*
README
此版本基于2013年6月12日的YUI压缩器2.4.8版本。
此版本包含了一些原始YUI压缩器中不存在的修复和功能。
目录
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. 如何使用
您可以使用以下三种方式使用此库
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 并显示统计信息。
- CLI参数
- 改进
- 性能:代码分析后比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快2倍
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: none
和background: 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
。请查看代码以查看“安全”属性的列表。 padding
和margin
属性缩短到最简形式,即从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
方法。 bold
和normal
值分别压缩为700
和400
,用于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日
- 支持Composer。该软件包为tubalmartin/cssmin
- 修复了#17问题
v2.4.8-p3 2014年4月26日
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