dotco / rebuilder
PHP 资产管理。
Requires
- php: >=5.3.2
This package is not auto-updated.
Last update: 2024-09-28 14:06:58 UTC
README
Rebuilder 与常见的资产管理管道模式不同。Rebuilder 的目的是不在您的应用程序管道中运行,而是通过 cronjob、钩子或其他您自己触发的手段运行。
Rebuilder 的核心概念是能够排队运行模块。这些模块可以执行什么操作或修改哪些文件没有限制。Rebuilder 只关心您的模块是否遵循特定的命名约定和目录结构,以便进行自动加载。
先决条件
某些 Rebuilder 模块可能有先决条件。
- PHP 5.3+
- Composer(它内部使用自动加载器)
- 对您的公共媒体目录的写入权限
现有模块
以下模块目前存在,并随 Rebuilder 一起提供
- JSMin - 一个与 Rebuilder 兼容的修改过的 php-jsmin PHP 版本
- CSSTidy - 一个与 Rebuilder 兼容的修改过的 php-css-tidy 版本
- Gzip - 一个生成具有 .gz.ext 扩展名的压缩文件的定制模块
- S3 - 一个与 Rebuilder 和 Gzip 模块兼容的修改过的 amazon-s3-php-class 版本
- Bundler - 一个围绕 JSMin 和 CSSTidy 的包装器,用于创建资产 "bundle"。包括用于 "捆绑" 资产的命令行二进制文件以及用于在您的客户端包含捆绑的脚本。
以下是模块及其配置参数的概述。
JSMin
JSMin 是一个将一组 JS 文件合并成一个文件的模块。它具有内置处理尝试检索远程 HTTP 文件的功能(例如 Google 托管的 jQuery)。JSMin 还处理 JavaScript 文件的压缩。它还内置了处理,会跳过具有 min.
的文件名中的压缩。这是为了避免重复压缩。JSMin 具有以下配置设置
- basepath - 服务器上文件公共目录的完整基本路径。与以下相对文件路径连接。
- files - 要合并的文件的相对路径数组。必须按顺序。
- output_file - CSS 文件合并的输出文件的相对路径。
CSSTidy
CSSTidy 是一个将一组 CSS 文件合并成一个文件的模块。CSSTidy 还将 CSS 压缩成一行或每行一个规则。
CSSTidy 具有以下配置设置
- basepath - 服务器上文件公共目录的完整基本路径。与以下相对文件路径连接。
- multi_line - 是否在单行上合并文件(最大压缩),或每行一个规则。
- files - 要合并的文件的相对路径数组。必须按顺序。
- output_file - CSS 文件合并的输出文件的相对路径。
Gzip
Gzip 是一个将媒体资产压缩为新文件的模块。它与 S3 模块紧密耦合,因为 S3 模块自动处理为 .gz.ext 扩展名的压缩文件设置正确的标题。这确保您从 S3 正确提供压缩文件。
Amazon S3
S3 是一个将媒体资产添加到您的 Amazon S3 账户的模块。它具有配置选项,例如存储桶、文件名前缀(使它们看起来像目录结构)、压缩等。
Bundler
包管理器非常出色。它将上述所有模块组合成一个套餐。您可以创建资产/媒体 "包",并通过包含的客户端脚本提供服务,其中它会处理是否提供单个文件、合并文件、压缩文件、gzip 文件、来自 S3 的文件或任何组合文件的工作。它非常强大。
- 包 - 以以下格式的多维数组
'包名' => array('js' => array('requires' => array(), 'files' => array()), 'css' => array('requires' => array(), 'files' => array()))
- csstidy - CSSTidy 配置选项数组
- gzip - Gzip 配置选项数组
- jsmin - JSMin 配置选项数组
- s3 - S3 配置选项数组
出于所有目的,您可以从每个模块中提取配置选项来初始化包管理器,以避免重复配置选项。
模块约定
创建或移植模块以与 Rebuilder 一起使用时必须遵循的约定如下
- 模块必须放置在
/modules/
中其自己的命名空间目录中,例如/modules/CSSTidy/
和/modules/JSMin/
- 模块必须在它们的根目录中包含一个
config.php
文件,其中包含默认配置设置。有关约定,请参阅下面的 使用 部分。 - 模块可以包含子目录和类。
- 如果您在子目录中有一个类,类名必须包含子目录路径,其中任何目录分隔符
/
都被下划线_
替换。 - 类命名和目录结构与 PSR-0 相似,但有以下例外:
/modules/JSMin/JSMin.php
- 模块必须有一个默认构造函数,
__construct()
,它接受一个$config
数组参数 - 模块必须有一个
public function run()
方法,该方法由 Rebuilder 调用
使用
Rebuilder 旨在非常易于使用。在非常高级的层面上,您只需要运行几个命令,传递一个多维数组,其中包含您希望运行的模块及其配置选项。
Rebuilder 需要传递一个 $modules
数组以排队模块。对于每个模块,Rebuilder 都有一组基本的配置设置需要传递,以便它能够确定如何加载模块,该模块是否应该实际运行以及传递给模块的配置值
- class - 模块主要类的名称 [CSSTidy]
- enabled - 模块是否启用 [布尔值 true|false]
- config - 针对该模块的特定配置数组
以下是一些使用 Rebuilder 与 CSSTidy 和 JSMin 一起使用的快速示例。CSSTidy 和 JSMin 的具体配置选项将在稍后介绍。
运行 CSSTidy
<?php // compress CSS $files into $output_file $modules = array( 'csstidy' => array( 'class' => 'CSSTidy', 'enabled' => TRUE, 'config' => array( 'basepath' => '/path/to/public/directory/', 'multi_line' => TRUE, 'files' => array( 'css/reset.css', 'css/global.css' ), 'output_file' => 'css/combined.css' ) ) ); require('Rebuilder/Core.php'); $rebuilder = new Rebuilder_Core($modules); $rebuilder->run(); <?php
运行 JSMin
<?php $modules = array( 'jsmin' => array( 'class' => 'JSMin', 'enabled' => TRUE, 'config' => array( 'basepath' => '/path/to/public/directory/', 'files' => array( 'js/jquery.min.js', 'js/global.js' ) 'output_file' => 'js/combined.js' ) ) ); require('Rebuilder/Core.php'); $rebuilder = new Rebuilder_Core($modules); $rebuilder->run();
运行 CSSTidy 和 JSMin
<?php $modules = array( 'csstidy' => array( 'class' => 'CSSTidy', 'enabled' => TRUE, 'config' => array( 'basepath' => '/path/to/public/directory/', 'multi_line' => TRUE, 'files' => array( 'css/reset.css', 'css/global.css' ), 'output_file' => 'css/combined.css' ) ), 'jsmin' => array( 'class' => 'JSMin', 'enabled' => TRUE, 'config' => array( 'basepath' => '/path/to/public/directory/', 'files' => array( 'js/jquery.min.js', 'js/global.js' ) 'output_file' => 'js/combined.js' ) ) ); require('Rebuilder/Core.php'); $rebuilder = new Rebuilder_Core($modules); $rebuilder->run();
运行 Gzip
待办事项
运行 Amazon S3
<?php $modules = array( 's3' => array( 'class' => 'S3', 'enabled' => TRUE, 'config' => array( 'accessKey' => 'your-access-key', 'privateKey' => 'your-private-key', 'useSSL' => true, 'bucket' => 'bucket-name' ) ) ); require('Rebuilder/Core.php'); $rebuilder = new Rebuilder_Core($modules); $rebuilder->run();
运行 Bundler
Bundler 应该有自己的 README...
从命令行使用 Rebuilder
运行 Bundler 命令行脚本
# specifying a configuration file (wont work without action param) ./vendor/bin/rebuilder --config="/path/to/config.php" --env="local" # run a particular action ./vendor/bin/rebuilder --modules="csstidy,jsmin" --config="/path/to/config.php" --env="local" # run with a type specifier (only upload images to S3) ./vendor/bin/rebuilder --modules="s3" --type="img" --config="/path/to/config.php" --env="local" # run bundler ./vendor/bin/rebuilder --modules="bundler" --config="/path/to/config.php" --env="local"