bennettstone / magicmin
MagicMin 是一个基于 PHP 的 JavaScript 和 CSS 缩小和合并类,旨在生成缩小、合并和自动更新的文件,以简化在生产和开发环境之间使用缩小文件和更新的过程。
Requires
- php: >=5.1.0
This package is not auto-updated.
Last update: 2024-09-14 16:45:00 UTC
README
MagicMin 是一个基于 PHP 的 JavaScript 和 CSS 缩小和合并类。
该类旨在生成缩小、合并和自动更新的文件,简化在生产和开发环境之间使用缩小文件和更新的过程。
此类有四个主要功能
- 缩小单个文件
- $class->minify('sourcefile', 'outputfile', 'version');
- 合并和缩小整个目录的内容
- $class->merge('outputfile', 'directory', 'type [css, js]', array('要排除的项目'), array('按顺序合并和缩小的文件'));
- 可以使用第五个和最后一个参数按特定顺序进行输出和缩小,文件作为数组传递
- 只在这里优先考虑必要的文件,而不是目录中的每个文件
- 编码图像文件数据,替换 CSS 中的外部图像引用
- 仅适用于 CSS 文件
- 默认为 false(保留图像引用)(见“基本用法,项目 #1”)
- 使用指定的缓存控制使用 gzip 提供生成的资源
- zlib 必须存在并启用,否则不使用 gzip
- 默认过期设置为 30 天(60 x 60 x 24 x 31)
此类使用 filemtime 来确定何时以及是否需要重新创建缩小版本,并且仅在所选包含在缩小或合并函数中的文件比先前创建的缩小文件新时,才会创建新的缩小文件
文件名中包含 ".min." 的文件将不会缩小其内容,但内容将像正常一样返回并添加到编译文件中,因为它应该假定这些文件已经缩小。
完整的用法示例包含在 example.php 中,并且此包包含在 /base 中的 jqueryui 样式中,以及一些用于测试的杂项 JavaScript 和 bootstrap 文件。
由于不一致,于 2013 年 6 月 15 日删除了正则表达式和 str_replace 操作符,并用
- JsMin 作为默认值
- 如果 jsmin.php 文件未在 class.magic-min.php 相同目录中找到,它将从 GitHub 获取并在同一目录中自动创建
- JsMin 是用于 JavaScript 的默认缩小包
- Google Closure
- 要使用 Google Closure,请将 'closure' => true 添加到类初始化中
##基本用法 首先,包括并初始化类。类已更新为使用最多 7 个键 -> 值对的数组,所有接受布尔值或可以完全省略
- Base64 编码的图像(本地或远程)可以在生成时自动替换文件引用。这仅适用于 CSS 文件。
- 'encode' => true/false(默认为 false)
- 以 "http" 或 "https" 开头的 "url()" 类型的文件路径将使用 cURL 而不是 file_get_contents 获取并编码,用于本地文件
- 输出生成的文件路径,或返回用作变量
- 'echo' => true/false(默认为true)
- 输出总执行时间
- 'timer' => true/false(默认为false)
- 在__destruct中设置,以记录到javascript控制台,根据需要调整
- 使用gzip与缓存控制输出压缩/合并的资产
- 'gzip' => true/false(默认为false)
- 使用Google Closure API而不是jsmin(jsmin是默认)
- 'closure' => true(默认为false)
- 保留或删除文件内容中的注释(感谢muertet提供这个功能)
- 'remove_comments' => true/false(默认为true)
- 根据文件生成时间生成哈希文件名。允许在不使用查询字符串版本号的情况下更好地缓存清除
- 'hashed_filenames' => false/true(默认为false)
- 自动将MagicMin的操作结果输出到javascript控制台。与调用$minified->logs()相同,但无需显式调用"logs()"函数
- 'output_log' => false/true(默认为false)
- 强制重新编译合并和压缩的文件,以供开发使用
- 'force_rebuild' => false/true(默认false,请谨慎使用!)
require( 'class.magic-min.php' ); //Default usage will echo from function calls and leave images untouched $minified = new Minifier(); //Return data without echo $minified = new Minifier( array( 'echo' => false ) ); //Echo the resulting file path, while base64_encoding images and including as part of css $minified = new Minifier( array( 'encode' => true ) ); //Return only AND encode/include graphics as part of css (gasp) $minified = new Minifier( array( 'encode' => true, 'echo' => false ) ); //Include images as part of the css, and gzip $minified = new Minifier( array( 'encode' => true, 'gzip' => true ) ); //Use google closure API, and gzip the resulting file $minified = new Minifier( array( 'gzip' => true, 'closure' => true ) ); //Use google closure API, gzip the resulting file, hash filenames, output to console $minified = new Minifier( array( 'gzip' => true, 'closure' => true, 'hashed_filenames' => true, 'output_log' => true ) );
输出单个压缩样式表
<link rel="stylesheet" href="<?php $minified->minify( 'css/style.css' ); ?>" />
输出单个压缩javascript文件(将输出为js/autogrow.min.js)
<script src="<?php $minified->minify( 'js/autogrow.js' ); ?>"></script>
合并和压缩整个目录的内容
<script src="<?php $minified->merge( 'js/packed.min.js', './js', 'js' ); ?>"></script> <link rel="stylesheet" href="<?php $minified->merge( 'css/master.min.css', './css', 'css' ); ?>" />
##高级用法
输出具有指定文件名和?v=参数的压缩样式表
<link rel="stylesheet" href="<?php $minified->minify( 'css/style.css', 'css/style-compressed.min.css', '1.1' ); ?>" /> //Will output: <link rel="stylesheet" href="css/style-compressed.min.css?v=1.1" />
输出具有[filename].min.js名称的压缩javascript文件,并包含?v=1.8参数
<script src="<?php $minified->minify( 'js/jquery.reveal.js', '', '1.8' ); ?>"></script> //Will output: <script src="js/jquery.reveal.min.js?v=1.8"></script>
检索/js目录中所有javascript文件的内容作为master.min.js(排除上述文件)
<?php $exclude = array( 'js/autogrow.js', 'js/autogrow.min.js', 'js/jquery.reveal.js', 'js/jquery.reveal.min.js' ); ?> <script src="<?php $minified->merge( 'js/packed.min.js', 'js', 'js', $exclude ); ?>"></script>
获取目录中的所有样式表,并创建单个压缩样式表(排除上述使用的样式表)
<?php $exclude_styles = array( 'css/style.css', 'css/style-compressed.min.css' ); ?> <link rel="stylesheet" href="<?php $minified->merge( 'css/master.min.css', 'css', 'css', $exclude_styles ); ?>" />
###查看MagicMin执行的操作
为了提供更多透明度,已添加"logs()"函数,可以将console.log消息输出到使用MagicMin的页面,以便在页面的源代码或javascript控制台中查看。
如果使用,此函数应在magicmin脚本输出所有其他输出之后请求,即...
<html> <head> <?php $minified = new Minifier( array( 'gzip' => true, 'timer' => true ) ); ?> <script src="<?php $minified->merge( 'js/my-new-file.min.js', 'javascript-directory', 'js' ); ?>"></script> </head> <body> <h1>your content here</h1> <?php $minified->logs(); ?> </body> </html>
这将在控制台输出类似以下内容
Minifier Log : Timer enabled
Minifier Log : Gzip enabled
Minifier Log: timer : MagicMin processed and loaded in 0.00019097328186 seconds
这与在初始化MagicMin时添加'output_log' => true参数相同
###在"merge"中使用时指定包含文件的顺序
由于假设glob()将确定依赖关系并不切实际,因此merge()函数存在第五个参数。
为了指定顺序,您只需指定需要排序的文件即可。您**不需要指定目录中的所有文件**,该函数将自动优先处理传递给$order参数的文件。
<?php //Only exclude autogrow.js $exclude = array( 'js/autogrow.js' ); //Put jquery and validate before anything else $order = array( 'js/jquery.min.js', 'js/jquery.validate.js' ); <script src="<?php $minified->merge( 'js/magically-ordered.min.js', 'js', 'js', $exclude, $order ); ?>"></script>
###仅按顺序包含指定的文件,忽略所有其他文件
截至2013年6月13日,->merge()函数的第三个参数现在可以接受包含文件的数组。文件将按数组中指定的顺序包含。
当使用数组作为第三个参数(而不是"css"或"js"文件类型)时,**不要包含其他参数**,因为这将可能产生冲突。
<?php $include_only = array( 'css/base/jquery.ui.all.css', 'css/base/jquery.ui.base.css', 'css/base/jquery.ui.spinner.css' ); ?> <link rel="stylesheet" href="<?php $minified->merge( 'css/base/specified-files.css', 'css/base', $include_only ); ?>" />
注意:文件必须是相同的类型(css或js),因为不同类型的文件在输出中不会很好地协同工作
##WordPress中的使用
由于许多MVC框架(如WordPress)使用完整的URI来引用样式表和javascript文件,因此首先创建一个包含header.php文件绝对路径的变量,并确保Minifier初始化设置echo为false,这很有帮助。
例如(在header.php中)
$dir = dirname( __FILE__ ); require_once( $dir .'/includes/class.magic-min.php' ); $min = new Minifier( array( 'echo' => false ) );
然后执行str_replace操作以重新生成样式表或javascript文件的URI
<link rel="stylesheet" href="<?php echo str_replace( $dir, get_bloginfo('template_directory'), $min->merge( $dir . '/css/master.min.css', $dir . '/css', 'css' ) ); ?>" />
这反过来会输出正确的样式表的URI
<link rel="stylesheet" href="http://yourwebsite.com/wp-content/themes/yourtheme/css/master.min.css" />
### 更新日志
3.0.4
- 添加了暴力破解选项以重新编译压缩的资产
3.0.3
- 添加output_log到配置选项以自动输出到控制台
- 修改了Google Closure Compiler请求数据,当Closure Compiler返回错误时,优雅地降级,返回非压缩的原始文件内容,而不是将Google错误消息写入JavaScript文件
3.0.2
- 修复了强制在minified_filedata请求中使用数组的问题
3.0.1
- 添加了对不区分协议的URI的支持,例如'//ajax.googleapis.ac.cn/ajax/libs/...'
- 添加了即插即用的功能以简化合并功能
- 修复了使用文件列表时的合并功能问题
- 修改了minified_filedata,以存储压缩包中包含的所有文件的完整列表
- 添加了对在传递给“合并”函数的文件数量更改时自动重新压缩的支持