it-for-free / php-simple-assets
简单的 PHP 资产管理:从供应商复制资产(js、css等),支持依赖
Requires
- php: >=5.3.0
- it-for-free/rusphp: v2.*
README
从供应商发布资产(js、css等),支持依赖(受yii2 assets启发)
安装(Install)
使用 composer 进行安装
composer require it-for-free/php-simple-assets:~v0.0.1
(通过 composer 安装)。
使用(Usage)
it-for-free/php-simple-assets
提供了两个类(it-for-free/php-simple-assets
包提供两个类)
SimpleAssetManager
-- 管理资产之间的依赖关系,并将连接的文件输出到 HTML 模板中(管理资产之间的依赖关系,并将添加的文件输出到 HTML 模板中)SimpleAsset
-- 描述资产的基类(资产定义的基类)
配置 SimpleAssetManager(资产)(Configure Asset Manager)
在初始化应用程序(或在使用此包的其他功能之前)设置资产文件夹的路径(相对于网站根目录):(在您的应用程序初始化期间或在使用此包的其他不同功能之前,设置相对于文档根目录的资产基本发布路径)
\ItForFree\SimpleAsset\SimpleAssetManager::$assetsPath = 'myassets/'; // default 'assets/'
-- 这个目录应该是可写的($assetsPath
目录应该是可写的)
资产声明(Asset declaration)
通过继承 SimpleAsset
定义新的资产包(使用 js 和 html 路径定义您的新资产)
namespace application\models; use ItForFree\SimpleAsset\SimpleAsset; /** * TestAsset -- пример описания пакета ресурсов (ассета) * * @author vedro-compota */ class BaseAsset extends SimpleAsset { public $basePath = 'JS/'; // from doc root public $js = [ 'myjs/basejs.js' // relative from $basePath path ]; public $css = [ 'myjs/css/basecss.css' // relative from $basePath path ]; }
也可以指定依赖于其他资产的资产,为此,在 $needs
属性中设置一个包含资产完整类名的数组,这些资产是该资产所依赖的(您还可以通过设置 $needs
属性来定义来自其他包的依赖项)
use ItForFree\SimpleAsset\SimpleAsset; use application\models\BaseAsset; /** * TestAsset -- пример описания пакета ресурсов (ассета) * * @author vedro-compota */ class TestAsset extends SimpleAsset { public $basePath = 'JS/'; public $js = [ 'myjs/test1.js', 'myjs/test2222.js' ]; public $css = [ 'myjs/css/my.css' ]; public $needs = [BaseAsset::class]; }
然后在代码的任何位置,例如在视图中注册资产(然后在代码的任何位置,例如在视图中通过调用 ::add()
注册所需的任何资产)
<?php use application\models\TestAsset; use ItForFree\SimpleAsset\SimpleAssetManager; TestAsset::add(); ?> <div class="row"> <div class="col "> <p class="lead"> Тестируем... </p> Js: <pre><?php SimpleAssetManager::printJs() ?></pre> Css: <pre><?php SimpleAssetManager::printCss() ?></pre> </div> </div>
这将给我们(我们将得到)
Js: <pre><script type="text/javascript" src="/assets/88bdd3ea85/1542210511/js/basejs.js"></script> <script type="text/javascript" src="/assets/0a23d877c3/1542203580/js/test1.js"></script> <script type="text/javascript" src="/assets/0a23d877c3/1542203580/js/test2222.js"></script> </pre> Css: <pre><link rel="stylesheet" type="text/css" href="/assets/88bdd3ea85/1542210511/css/basecss.css"> <link rel="stylesheet" type="text/css" href="/assets/0a23d877c3/1542203580/css/my.css"> </pre>
-- 如所见,SimpleAssetManager
可以按正确的顺序输出所有注册的 JS 和 CSS。(SimpleAssetManager
可以像 HTML 资源标签一样输出 JS 或 CSS)
JavaScript 源映射
您可以将 source map
文件的路径添加到您的资产类的 public $js
属性中(它们应以 .map
结尾)。
(您可以将 source map
文件的路径添加到您的资产类的 public $js
属性中(它们应以 .map
结尾))。
测试
使用代码覆盖率
cept run unit
相关包(Other related packages)
查看 SimpleMVC 组件(Look at SimpleMVC components):https://github.com/it-for-free/SimpleMVC#%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B
待办事项(ToDo)
- 如果某个 js 文件在发布之前已经存在于资产包(供应商)的文件夹中,然后没有与其他资产文件一起发布,之后又被添加到列表中,则该文件将不会被复制 -- 问题已解决,但 需要重写模拟测试以使用客户端代码使用的样式。