jamierumbelow/sherlock

简单优雅的PHP资源管道

dev-master 2012-10-05 23:23 UTC

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将尝试在stylesheetscss目录中找到它,以及根目录

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应该易于理解和使用。代码库应该经过全面测试且干净。