tekton/assets

该包已被废弃且不再维护。没有建议的替代包。

一个可以轻松读取清单并编译和组合资源的资产管理器。

3.0.0 2018-11-17 14:13 UTC

This package is auto-updated.

Last update: 2020-06-09 20:10:44 UTC


README

支持资产管理清单、队列以及编译/压缩的资产管理器。

安装

composer require tekton/assets

使用方法

基础

AssetManager 和 AssetCompiler 可以单独使用,但它们旨在一起工作,以使资产管理和处理尽可能简单和无缝。

要使用它,创建 AssetManager 的一个实例,并提供您的应用程序的文件系统和网络根目录。

require 'vendor/autoload.php';

use Tekton\Assets\AssetManager;

$manager = new AssetManager(__DIR__, 'https://:8000/');

// Get file path and URL
$path = $manager->get('images/logo.png')->path();
$url = $manager->get('images/logo.png')->url();

队列是一种将不同的资源组合在一起的方式,类似于 WordPress 处理资源的方式。可以定义依赖关系,并且结果列表将按顺序排序。

use Tekton\Assets\AssetManager;

$manager->queue('scripts')->add('jquery', 'js/jquery.min.js');
$manager->queue('scripts')->add('app', 'js/app.js', ['jquery']);

// Output every script
foreach ($manager->queue('scripts')->all() as $asset) {
    echo '<script src="'.$asset->url().'"></script>';
}

如果资源在构建系统步骤中经过修订以用于缓存破坏,则可以加载清单,并且 AssetManager 将首先尝试通过清单解析资源,然后再检查文件系统。AssetManifest 需要一个缓存目录,以便 JSON/YML 文件不会在每个请求中解析。

use Tekton\Assets\AssetManifest;

$manager->setManifest(new AssetManifest('manifest.json', 'cache/'));

编译

AssetManager 还支持配置 AssetCompiler,它启用服务器端的文件处理。

use Tekton\Assets\AssetCompiler;
use Tekton\Assets\Filters\MinifyFilter;

$compiler = new AssetCompiler('cache/', 'https://:8000/cache/');
$compiler->registerFilter('minify', new MinifyFilter);

$manager->setCompiler($compiler);

// Compile single file
echo '<link href="'.$manager->get('css/main.css')->compile('minify')->url().'">';

// Compile queue
$manager->queue('styles')->add('one', 'css/one.css');
$manager->queue('styles')->add('two', 'css/two.css', ['one']);

foreach ($manager->queue('styles')->compile('minify') as $asset) {
    echo '<link href="'.$asset->url().'">';
}

// OR combine queue into single file
echo '<link href="'.$manager->queue('styles')->compile('minify', true)->url().'">';

对于需要通过测试多个源文件来使缓存失效的情况,您可以添加一个文件数组以检查更改。

use Tekton\Assets\Filters\ScssFilter;

$compiler->registerFilter('scss', new ScssFilter);

// Compile SCSS and test all SCSS files for changes
echo '<link href="'.$manager->get('scss/main.scss')->compile(['scss', 'minify'], glob('scss/*.scss'))->url().'">';

// For queues the additional paths to test are the third argument
$manager->queue('styles')->add('vendor', 'css/vendor.css');
$manager->queue('styles')->add('app', 'scss/main.scss', ['vendor']);

foreach ($manager->queue('styles')->compile('scss', false, glob('scss/*.scss')) as $asset) {
    echo '<link href="'.$asset->url().'">';
}

性能

尽可能地使用缓存以避免文件系统交互和重新编译。但在生产中,建议禁用文件修改时间检查(特别是如果您正在编译包含许多额外文件以测试更改的 SCSS),并且只有当结果文件缺失时才进行编译。然后您必须手动清空缓存或作为部署后的步骤。

$compiler->setIgnoreCacheTime(true);

// After deployment...
$compiler->clearCache();

许可证

MIT