taufik-nurrohman / minify
在服务器端减小CSS、HTML、JavaScript、JSON、PHP和XML代码的大小。
Requires
- php: >=7.1
This package is auto-updated.
Last update: 2024-09-27 14:52:03 UTC
README
动机
该项目最初是一个gist,现在比它的副本拥有更多的星标,而实际上它是为了放弃该gist而制作的。它受到了一个代码片段的启发,这个代码片段可能会在未来丢失,所以我决定复制它。
我曾经收到一封电子邮件,有人想使用我扩展的一些代码,他打算在专有应用程序中使用,希望不受GPL限制的约束。一开始在法律上是不可能的,因为扩展始终是其核心应用程序的一部分。而其核心应用程序,在这个案例中,从一开始就使用了GPL许可证。因此,其扩展也必须在GPL许可证下许可。
然后我决定在MIT许可证下完全重写此项目,因为我不再认为这种实现是一个“复杂的东西”,它需要大量的编程工作。我还想使我的实现对广泛的人群(包括那些开发专有应用程序的人)普遍可用,这样我就可以更容易地从他们那里获得经济支持。
使用方法
此转换器可以使用Composer进行安装,但它不需要任何其他依赖项,并且仅使用Composer自动包含文件的能力。那些不使用Composer的人应该能够在没有任何问题的前提下,将index.php
文件直接包含到您的应用程序中。
使用Composer
从命令行界面,导航到您的项目文件夹,然后运行此命令
composer require taufik-nurrohman/minify
在您的应用程序中引入生成的自动加载文件
<?php use function x\minify\c_s_s as minify_css; use function x\minify\h_t_m_l as minify_html; use function x\minify\j_s as minify_js; use function x\minify\j_s_o_n as minify_json; use function x\minify\p_h_p as minify_php; use function x\minify\x_m_l as minify_xml; require 'vendor/autoload.php'; echo minify_css('asdf { asdf: 0px; } asdf { /* asdf */ }'); // Returns `'asdf{asdf:0}'`
使用文件
在您的应用程序中引入index.php
文件
<?php use function x\minify\c_s_s as minify_css; use function x\minify\h_t_m_l as minify_html; use function x\minify\j_s as minify_js; use function x\minify\j_s_o_n as minify_json; use function x\minify\p_h_p as minify_php; use function x\minify\x_m_l as minify_xml; require 'index.php'; echo minify_css('asdf { asdf: 0px; } asdf { /* asdf */ }'); // Returns `'asdf{asdf:0}'`
注意
我选择命名函数的方式可能会让很多人感到烦恼,但这部分是Mecha决定保留的标准规则的一部分,以使其可逆。您始终可以在特定文件中创建一个函数别名列表,您可以将其存储在某个地方,稍后在您的应用程序中包含它。这样,您就可以只使用您觉得更易打的函数别名。
此转换器只关注空白符的删除。其他优化被视为额外加分项。它不能读取您的代码,只能进行通用的令牌化,例如将注释和字符串分组为单个令牌。它不会修复您的代码,例如在行尾添加可选的分号,因为它是跟随换行符的,所以在这种情况下分号是可选的。但是,然后您的JavaScript代码在压缩后可能会中断,因为所需的换行符现在已消失。
// Before a() b() c() // After a()b()c()
我仍然不太明白为什么这种写JavaScript的方法在最近变得如此流行。可能启动这种编码风格的人喜欢这个编码风格,但他/她可能不愿意承认。
这段CSS代码不合法,因为需要在and
标记之后有一个空格,即使在这种情况下CSS压缩器也不会插入空格。
/* Before */ @media (min-width: 1280px)and(max-width: 1919px) { color: #f00; } /* After */ @media (min-width:1280px)and(max-width:1919px){color:#f00}
理念是:你需要对将要压缩的代码负责。如果原始代码运行良好,那么压缩后的代码也很有可能会运行良好。
选项
CSS
<?php c_s_s(?string $from): ?string;
HTML
<?php h_t_m_l(?string $from): ?string;
JS
j_s(?string $from): ?string;
JSON
<?php j_s_o_n(?string $from): ?string;
PHP
<?php p_h_p(?string $from): ?string;
XML
<?php x_m_l(?string $from): ?string;
测试
将此仓库克隆到支持PHP的Web服务器的根目录下,然后你可以使用浏览器打开test.php
文件,以查看不同情况下此转换器的结果和性能。
调整
全局可重用函数
你可以使用此方法在全局范围内缩短函数名。
<?php require 'index.php'; // Or, if you are using Composer… // require 'vendor/autoload.php'; function minify_css(...$v) { return x\minify\c_s_s(...$v); } function minify_html(...$v) { return x\minify\h_t_m_l(...$v); } function minify_js(...$v) { return x\minify\j_s(...$v); } function minify_json(...$v) { return x\minify\j_s_o_n(...$v); } function minify_php(...$v) { return x\minify\p_h_p(...$v); } function minify_xml(...$v) { return x\minify\x_m_l(...$v); }