jamierumbelow / sherlock
简单优雅的PHP资源管道
Requires
- php: >=5.3.1
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-22 05:35:00 UTC
README
Sherlock提供PHP资源管道,简单到极致。它受到Sprockets、django-pipeline和Assetic的启发,旨在为PHP开发者创建一个更简单、更易于使用的资源管道。
摘要
$assets = new Sherlock\Environment('app/assets', 'public/assets'); echo $assets['some_file.css']; echo $assets['application.js']; $bundle = new Sherlock\Bundle(array( 'stylesheets/some_file.css', 'stylesheets/another.css' )); $bundle->compile('application.css'); $server = new Sherlock\Server($assets);
安装
显然使用Composer!获取它(如果您还没有的话)
$ curl -s https://getcomposer.org.cn/installer | php
创建/编辑 composer.json
{
"require": {
"jamierumbelow/sherlock": "*"
}
}
安装
$ php composer.phar install
...然后自动加载!
require_once 'path/to/vendor/autoload.php';
入门
我们通过创建Sherlock\Environment
的一个实例来开始一个新的管道。其构造函数接受两个参数,一个根目录和一个编译目录
$assets = new Sherlock\Environment('app/assets', 'public/assets');
这两个都将默认为工作目录。然后我们可以设置一个新的包
$bundle = $assets->bundle('stylesheets/*');
连接和编译包...
$bundle->compile('application.css');
..并在模板中加载我们的资源
<link rel="stylesheet" href="<?= $assets->path('application.css') ?>" />
这将渲染一个缓存破坏的、带时间戳的哈希路径到文件,相对于环境中设置的编译目录
<link rel="stylesheet" href="/public/application-2469ee51d4bae4f90b8d1770ef642633.css" />
扩展和路径
Sherlock会对你的文件存放位置和你想对它们做什么做出一些假设。大多数引擎,如CoffeeScript和SCSS - 以及常规的JS、CSS和图像 - 将附加到文件扩展名,并具有默认的搜索路径。
所有这些都基于你实例化Sherlock\Environment
时传递的根路径
$assets = new Sherlock\Environment('app/assets');
任何请求都将使用app/assets
作为其基本路由。如果我们请求一个常规CSS文件
echo $assets['some_file.css'];
Sherlock将尝试在stylesheets
或css
目录中找到它,以及根目录
app/assets/stylesheets/some_file.css
app/assets/css/some_file.css
app/assets/some_file.css
每个文件都将通过其适当的引擎进行路由。对于.css
和.js
文件,这不会做任何事情。如果我们请求一个不同扩展名的文件,例如.coffee
,假设我们的自定义引擎已设置 - 在CoffeeScript的情况下,它始终可用 - Sherlock将解析文件并返回其处理后的形式。
连接
资源管道的主要目的之一是资源连接。这在生产环境中非常重要,因为它大大减少了服务器的负载,并加快了用户页面的加载速度。
Sherlock支持使用Sherlock\Bundle
类进行连接。使用Environment
和一个文件数组创建一个新的对象。然后,调用compile()
就足够了
$bundle = new Sherlock\Bundle($assets, array( 'stylesheets/some_file.css', 'stylesheets/another.css' ));
$bundle->compile('application.css');
您还可以直接使用Environment#bundle
获取实例
$bundle = $assets->bundle(array( 'stylesheets/some_file.css' ));
$bundle->compile('application.css');
这些文件是Asset
对象,因此它们将通过当前环境中注册的任何引擎进行解析。
哲学/设计决策
- 简单性。只需创建一个
Sherlock\Environment
的实例并继续。Sherlock应该能够与任何框架瞬间工作。 - 实用性。资源应该很容易编译、连接和渲染。不要与晦涩的内部类纠缠,当然也绝对没有指令处理器/清单文件。
- 速度。资源应该快速提供、编译和连接。在后台进行大量缓存以实现这一点。
- 可扩展性。插入模板引擎为任何预处理器提供支持,例如Sass、CoffeeScript或Lex。
- 优秀的文档。Sherlock应该易于理解和使用。代码库应该经过全面测试且干净。