dotco/rebuilder

PHP 资产管理。

v2.0.0.x-dev 2014-02-10 12:50 UTC

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"

Bitdeli Badge