jalle19/yii-yui-clientscript

为Yii提供的终极压缩客户端脚本实现

1.0.2 2014-07-03 12:56 UTC

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许可证许可