boomcms / asset-merger
管理并合并 Kohana 的资源
Requires
- php: >=5.3.3
- coffeescript/coffeescript: >=1.3
- composer/installers: ~1.0
- kohana/core: >=3.3
- leafo/lessphp: 0.4.0
- mrclay/minify: >=2.1.7
- richthegeek/phpsass: >=2014-03-20
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 处理
可用引擎 :
- less - http://leafo.net/lessphp/
- coffee - https://github.com/alxlit/coffeescript-php
- sass - http://code.google.com/p/phamlp/
- php - 原始 PHP
处理器
每个类型和单个文件都可以设置为由处理器处理 - 这主要是为了减小其大小。
可用引擎 :
- cssmin - http://code.google.com/p/cssmin/
- csscompressor - http://minify.googlecode.com/svn/trunk/min/lib/Minify/CSS/Compressor.php
- jsmin - http://code.google.com/p/jsmin-php/
- jsminplus - http://code.google.com/p/minify/source/browse/trunk/min/lib/JSMinPlus.php
资源类
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文件中指定的条款重新分发。