it-for-free/php-simple-assets

简单的 PHP 资产管理:从供应商复制资产(js、css等),支持依赖

v0.0.5 2019-02-25 11:29 UTC

This package is auto-updated.

Last update: 2024-08-26 17:59:48 UTC


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 文件在发布之前已经存在于资产包(供应商)的文件夹中,然后没有与其他资产文件一起发布,之后又被添加到列表中,则该文件将不会被复制 -- 问题已解决,但 需要重写模拟测试以使用客户端代码使用的样式。