lapaz / amechan
轻量级预处理资源链接管理器
0.2.0
2021-04-09 15:18 UTC
Requires
- php: >=7.2
- php-di/php-di: ^6.1
- webmozart/path-util: ^2.3
Requires (Dev)
- league/plates: ^3.3
- mikey179/vfsstream: ^1.6.7
- phpunit/phpunit: ^8.5.12
- slim/psr7: ^1.3
- slim/slim: ^4.7
README
Amechan(在日本大阪意味着糖果掉落)是PHP的一个轻量级预处理资源链接管理器。与Assetic、Sprockets Rails等不同,这个库没有副作用,而是与NodeJS工具(如Gulp)更好地协同工作。
快速入门
定义命名资源,捆绑JS或CSS内容
$assetManager = new AssetManager(); $assetManagr->asset('jquery', [ 'file' => '/assets/vendor/jquery/dist/jquery.js', 'section' => 'js', ]); $assetManagr->asset('bootstrap', [ 'baseUrl' => '/assets/vendor/bootstrap/dist', 'bundles' => [ [ 'files' => ['css/bootstrap.css', 'css/bootstrap-theme.css'], 'section' => 'css', ], [ 'file' => 'js/bootstrap.js', 'section' => 'js', ], ], 'dependency' => 'jquery', ]); $assetManagr->asset('some-jquery-plugin', [ ... ]); $assetManagr->asset('and-another-one', [ ... ]);
在渲染之前准备资源集合以供展示会使用。
$assets = $assetManagr->newCollection();
在视图文件中引入资源
layout.php
<?php $assets->add('bootstrap'); ?> <!DOCTYPE html> <html> <head> ... layout here
app-view.php
<?php $assets->add('bootstrap'); $assets->add('some-jquery-plugin'); ?> <div id="app-view"> ... app html </div>
冗余的->add()
调用会被汇总,并按其依赖关系排序。
然后,在head或body标签的末尾(通常包含在布局模板中)
<?php foreach ($assets->collectUrls('css') as $url) { echo "<link href="{$url}" rel="stylesheet">\n"; } ?> </head>
<?php foreach ($assets->collectUrls('js') as $url) { echo "<script src="{$url}"></script>\n"; } ?> </body>
收集并展开所有所需的资源。
<link href="/assets/vendor/bootstrap/dist/css/bootstrap.css" rel="stylesheet"> <link href="/assets/vendor/bootstrap/dist/css/bootstrap-theme.css" rel="stylesheet"> </head> <body> : : <script src="/assets/vendor/jquery/dist/jquery.js"></script> <script src="/assets/vendor/bootstrap/dist/js/bootstrap.js"></script> <script src="/assets/js/some-jquery-plugin.js"></script> </body>
特性
- 将多部分资源捆绑为单个单元
- 根据依赖链自动检测链接顺序
- 源到构建URL映射(任何到
*.min.js
) - 支持以
rev-manifest.json
格式使用修订哈希
当存在编译版本的资源时,可以映射URL。
if (is_dir(__DIR__ . '/../public/assets/dist')) { $assetManager->mapping(new UnifiedResourceMapper('/assets', [ 'dist/css/all.min.css' => [ 'vendor/bootstrap/dist/css/bootstrap.css', 'vendor/bootstrap/dist/css/bootstrap-theme.css', ], 'dist/js/all.min.js' => [ 'vendor/jquery/dist/jquery.js', 'vendor/bootstrap/dist/js/bootstrap.js', ], ])); }
<link href="/assets/dist/css/all.min.css" rel="stylesheet"> <script src="/assets/dist/js/all.min.js"></script>
可以将URL替换为修订哈希版本。
if (is_file(__DIR__ . '/../public/assets/dist/rev-manifest.json')) { $manifest = json_decode(file_get_contents( __DIR__ . '/../public/assets/dist/rev-manifest.json' ), true); $assetManager->mapping(new RevisionHashMapper('/assets/dist/', $manifest)); }
<link href="/assets/dist/css/all-33f4c35457.min.css" rel="stylesheet"> <script src="/assets/dist/js/all-5d8020ef9b.min.js"></script>
定义
// 待定(见/example
项目)