tekton / assets
该包已被废弃且不再维护。没有建议的替代包。
一个可以轻松读取清单并编译和组合资源的资产管理器。
3.0.0
2018-11-17 14:13 UTC
Requires
- php: >=7.0.0
- marcj/topsort: ~0.1
- tekton/support: ^2.0.0
Suggests
- leafo/scssphp: Required to use the SCSS filter (^0.7.7).
- matthiasmullie/minify: Required to use the minify filter (^1.3).
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