jalle19 / yii-yui-clientscript
为Yii提供的终极压缩客户端脚本实现
1.0.2
2014-07-03 12:56 UTC
Requires
- php: >=5.3.0
- jalle19/php-yui-compressor: 1.0.*
This package is auto-updated.
Last update: 2024-09-13 00:25:01 UTC
README
为Yii提供的终极压缩客户端脚本实现。它可以合并您的CSS和脚本文件,并使用YUI压缩器(通过php-yui-compressor包提供)进行最小化。
功能
- 标准CClientScript的即插即用替换(无需更改您注册脚本和样式的样式表的方式)
- 使用基于Java的YUI压缩器,而不是无数的几乎不维护的端口之一
- 检测JavaScript文件中的全局严格模式,并将此类脚本与标准脚本分开合并
- 提取
@import url("");
(例如,Google Font导入)语句,并在合并输出中预置它们以确保它们正常工作 - 为合并的文件使用唯一的文件名,这意味着您不必手动实现缓存破坏
- 压缩内联脚本
安装
使用Composer进行安装,然后在您的应用程序配置中添加以下内容
// change this path if necessary Yii::setPathOfAlias('yiiyuiclientscript', realpath(__DIR__.'/../../vendor/jalle19/yii-yui-clientscript/src/yiiyuiclientscript')); ... return array( ... 'components'=>array( ... 'clientScript'=>array( 'class'=>'yiiyuiclientscript\components\ClientScript', ), ... ), ... ),
您还需要在启动脚本中包含Composer自动加载器。通常这可以通过使用require_once('vendor/autoload.php');
来完成。
配置
有关YUI压缩器的可用选项,请参阅php-yui-compressor的文档。选项通过组件配置中的"compressorOptions"指定,例如
... return array( ... 'components'=>array( ... 'clientScript'=>array( 'class'=>'yiiyuiclientscript\components\ClientScript', 'compressorOptions'=>array( 'line-break'=>80, 'disable-optimizations'=>true, ) ), ... ), ... ),
排除文件
有时您可能想要合并和压缩所有文件,但其中一个除外(可能是因为它更改得太频繁,导致所有脚本都需要重新组合)。您可以使用"exclude"选项指定一个匹配这些文件的模式
... return array( ... 'components'=>array( ... 'clientScript'=>array( 'class'=>'yiiyuiclientscript\components\ClientScript', 'exclude'=>array( 'MainMenu' ), ), ... ), ... ),
模式匹配是通过在脚本URL上使用strpos()
完成的,意味着在上面的例子中,脚本MainMenu-typeahead-1.js
(以及自然所有其他名称中包含"MainMenu"的脚本)将单独注册。
使用自定义文件解析器
注册的脚本URL必须转换为内部问题文件的绝对路径。根据您的项目布局,默认实现可能不起作用。在这种情况下,您需要定义自己的路径解析器
... return array( ... 'components'=>array( ... 'clientScript'=>array( 'class'=>'yiiyuiclientscript\components\ClientScript', 'pathResolver'=>'\MyPathResolver' ), ... ), ... ),
示例实现(请参阅接口以获取更多详细信息)
<?php class MyPathResolver implements \yiiyuiclientscript\interfaces\PathResolver { public function resolveAssetPath($url) { // Check if the script is external foreach (array('http', 'https', '//') as $startsWith) if (strpos($url, $startsWith) === 0) return false; return \Yii::getPathOfAlias('webroot').$url; } }
关闭CSS URL重映射
默认行为是将CSS文件中的相对URL重映射,以补偿生成的合并文件可能位于与原始文件不同的位置的事实。有时,您的项目结构不需要任何重映射,因此您可以将其关闭
... return array( ... 'components'=>array( ... 'clientScript'=>array( 'class'=>'yiiyuiclientscript\components\ClientScript', 'remapCssUrls'=>false, ), ... ), ... ),
许可证
此代码根据New BSD许可证许可