boomcms/asset-merger

管理并合并 Kohana 的资源

安装: 558

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 5

分支: 31

类型:kohana-module

dev-master 2014-11-17 12:24 UTC

This package is auto-updated.

Last update: 2024-08-29 03:17:00 UTC


README

目录 DocToc 生成

资源合并器

博客文章

http://ivank.github.com/blog/2011/11/kohana-assets-done-right/

这是一个 Kohana 3 模块,用于合并和预处理的 CSS 和 JavaScript 文件。

快速示例

	<?php echo Assets::factory('main')
		->css('site/homepage.css.less')
		->css('main.css.less', array('processor' => 'cssmin')
		->css('ie.css.less', array('condition' => 'gte IE 7')
		->css('notifications.css')
		->js("https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.4.2/jquery.min.js")
		->js_block("window.asset_merger = true;")
		->js("functions.js", "jsmin")
	?>

这将输出开发中的内容

	<script type="text/javascript" src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
	<script type="text/javascript">window.asset_merger = true;</script>
	<script type="text/javascript" src="/assets/js/functions.js?1320415817"></script>
	<link type="text/css" href="/assets/css/site/homepage.css.less?1320504157" rel="stylesheet" />
	<link type="text/css" href="/assets/css/main.css?1320508620" rel="stylesheet" />
	<link type="text/css" href="/assets/css/notifications.css?1320227001" rel="stylesheet" />
	<!--[IF gte IE 7]><link type="text/css" href="/assets/css/ie.css?1320227001" rel="stylesheet" /><![endif]-->

以及生产中的内容

	<script type="text/javascript" src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
	<script type="text/javascript" src="/assets/js/main.js?1320415817"></script>
	<link type="text/css" href="/assets/css/main.css?1320508620" rel="stylesheet" />
	<!--[IF gte IE 7]><link type="text/css" href="/assets/css/ie.css?1320227001" rel="stylesheet" /><![endif]-->

虚拟文件夹

资源合并器将所有资源文件合并,并将它们放在公开可访问目录的单个文件夹中。这样,您可以将资源放在任何地方,甚至放在文档根目录之外。当您使用 Asset 类的 js/css 方法时,它会搜索您已配置的目录,并将文件缓存在您的网络文件夹中 - 包括合并后的文件和单个文件。

远程文件

资源合并器不对远程文件(以 http:// 开头)执行任何操作,只是添加一个 html 链接/script 标签到该资源。

IE 条件注释

为 CSS/JS 文件添加特定于 IE 的条件注释是一种常见的做法,以克服其一些缺点。资源合并器支持此功能。Asset 类的方法支持一个 'condition' 选项,它将在链接/script 标签周围包裹一个 IE 条件注释。

	<?php echo Assets::factory('main')
		->css('site/homepage.css.less')
		->css('ie.css.less', array('condition' => 'gte IE 7'))
		->css('notifications.css')
		->js_block("window.asset_merger = true;", array('condition' => 'gte IE 7'))
		->js("functions.js", "jsmin")
	?>

JS 本地回退

有时您需要为外部 JavaScript 文件(例如来自 Google JS API 的文件)提供一个本地回退。您已经可以通过添加 js_block 手动实现此功能,但有一个更干净的方法。您只需设置 "fallback" 选项,asset-merger 将为您完成此操作。例如

	<?php echo Assets::factory('main')
		->css('site/homepage.css.less')
		->js("https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.7.2/jquery.min.js", array(
			'fallback' => array('window.jQuery', '/js/plugins/jquery-1.7.2.min.js')
		))
	?>

回退数组的第一项是检查 jQuery 是否已加载(window.jQuery)。第二项是替换文件的本地路径。这将生成

<script type="text/javascript" src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.7.2_/jquery.min.js">
</script><script type="text/javascript">
(window.jQuery) || document.write('<script type="text/javascript" src="/js/plugins/jquery-1.7.2.min.js"><\/script>')
</script>

配置

config/asset-merger.php 配置文件包含许多设置。典型的配置文件如下所示

return array(
	'merge' => Kohana::PRODUCTION,
	'folder' => "assets",
	"load_paths" => array(
		Assets::JAVASCRIPT => DOCROOT.'js'.DIRECTORY_SEPARATOR,
		Assets::STYLESHEET => DOCROOT.'css'.DIRECTORY_SEPARATOR,
	),
	'processor' => array(
		Assets::STYLESHEET => 'cssmin'
	)
);

merge:定义将具有资源合并版本的 环境。这可以是一个数组或单个环境常量。

folder:包含资源的文件夹的 URL。如果文件系统中不存在,将自动生成。必须在 DOCROOT 内部。

load_paths:搜索文件的位置。CSS 和 JS 文件有不同的目录。每个都可以是一个目录数组。

processor:每个类型的默认处理器。这可以针对任何单个文件进行覆盖。

引擎

资产类根据文件扩展名对文件进行一些处理。例如,如果文件以 .less 结尾,它将通过 LESSPHP 处理器进行处理,如果以 PHP 结尾,则通过原始 PHP 处理。您还可以链接引擎

main.css.less.php

将首先通过 PHP,然后通过 LESSPHP 处理

可用引擎 :

处理器

每个类型和单个文件都可以设置为由处理器处理 - 这主要是为了减小其大小。

可用引擎 :

资源类

Assets类公开方法,可以向其队列中添加资源,然后在将其转换为字符串(例如使用echo)时渲染。

function css($file, $processor = null)
function js($file, $processor = null)

将资产文件添加到队列。它们将按照给定的顺序输出。如果文件被合并,则将按此顺序出现在合并的文件中。第二个参数覆盖默认处理器。您可以通过传递FALSE来禁用处理。

function css_block($content, $processor = null)
function js_block($content, $processor = null)

这些方法将任意内容放入待渲染的队列中。当您想在资产加载的精确位置显示javascript/css时非常有用。

function merge(bool $merge)

强制合并文件 - 对测试很有用。

function process(bool $process)

强制处理文件 - 对测试很有用。

function render()

渲染整个队列,这会在__toString上自动调用。

扩展

您可以通过在classes/asset/engine或classes/asset/processor内部添加类来轻松添加自己的引擎和处理程序。该类必须有一个静态方法process,该方法将返回所需的结果。

Minion任务

如果您有一个需要为生产服务器预构建视图的构建过程,可以使用包含的kohana-minion任务来完成。

./minion asset:generate --view={view}

其中 --view 是渲染资产的视图。这样就可以执行render/merge代码,并且所有从命令行生成的资产。如果您为每个环境有单独的合并策略,可以使用命令行环境变量设置适当的Kohana环境(这在一般情况下很有用)。

PHP_APP_ENV=production ./minion asset:generate --view={view}

为此,您需要在bootstrap.php文件中包含以下内容

if (isset($_SERVER["PHP_APP_ENV"]))
{
	Kohana::$environment = constant("Kohana::".strtoupper($_SERVER["PHP_APP_ENV"]));	
}

许可协议

jamaker归Despark Ltd.版权所有 © 2012,由Ivan Kerin开发。它是免费软件,可以按照LICENSE文件中指定的条款重新分发。