tleckie/versioned-assets

移动资产位置很繁琐且容易出错,需要你仔细更新所有模板中包含的所有资产的URL。资产组件允许你以有序且易于维护的方式完全控制资源的路径。

1.0.2 2021-05-14 17:20 UTC

This package is auto-updated.

Last update: 2024-09-20 18:59:34 UTC


README

快速且强大的php版本化资产引擎

Scrutinizer Code Quality Code Intelligence Status Build Status

安装

您可以通过composer安装此包

composer require tleckie/versioned-assets

移动资产位置既繁琐又容易出错 - 这需要你仔细更新所有模板中包含的所有资产的URL。资产组件允许你以有序且易于维护的方式完全控制资源的路径。

用法

<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\Versioned;

$bucket = new Bucket(new Versioned('v1'), '/path');

// Relative path
$bucket->url('js/app.js');
//result: /path/js/app.js?v1

// Absolute path
$bucket->url('/js/app.js');
//result: /js/app.js?v1

您还可以通过添加第二个参数来自定义版本格式,该参数将应用sprintf

<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\Versioned;

$bucket = new Bucket(
    new Versioned('v1', "%s?custom-version=%s"), 
    '/path'
);

// Relative path
$bucket->url('js/app.js');
//result: /path/js/app.js?custom-version=v1

// Absolute path
$bucket->url('/js/app.js');
//result: /js/app.js?custom-version=v1

如果您需要将资产包含到具有域名的位置,只需将域作为路径参数的值包含即可:当将域名配置为路径时,包含的相对和绝对资源将得到相同的结果

<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\Versioned;

$bucket = new Bucket(
    new Versioned('v1', '%s?version=%s'), 
    '//domain.cookieless.com'
);

// Relative path
$bucket->url('js/app.js');
//result: //domain.cookieless.com/js/app.js?version=v1

// Absolute path
$bucket->url('/js/app.js');
//result: //domain.cookieless.com/js/app.js?version=v1
<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\Versioned;

$bucket = new Bucket(
    new Versioned('v1', '%2$s/%1$s'), 
    '//domain.cookieless.com'
);

// Version in path
$bucket->url('js/app.js');
//result: //domain.cookieless.com/v1/js/app.js

如果您想为您的资产禁用版本控制,也可以使用NullVersioned。

<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\NullVersioned;

$bucket = new Bucket(
    new NullVersioned(), 
    '//domain.cookieless.com'
);

// Relative path
$bucket->url('js/app.js');
//result: //domain.cookieless.com/js/app.js

一种流行的管理资产版本化的策略,被Webpack等工具使用,就是生成一个JSON文件,映射所有源文件名到它们的对应输出文件。

{
"css/app.css": "build/css/app.af316426ea1d10021f3f17ce8031f93c2.css",
"js/app.js": "build/js/app.56fa630905267b809161e71d0f8a0c017b.js"
}
<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\JsonManifestVersioned;
$bucket = new Bucket(
    new JsonManifestVersioned(__DIR__ .'/json/rev-manifest.json')
);

$bucket->url('css/app.css');
//result: build/css/app.af316426ea1d10021f3f17ce8031f93c2.css

$bucket->url('js/app.js');
//result: build/js/app.56fa630905267b809161e71d0f8a0c017b.js
<?php

use Tleckie\Assets\Bucket;
use Tleckie\Assets\Versioned\JsonManifestVersioned;

$bucket = new Bucket(
    new JsonManifestVersioned(__DIR__ .'/json/rev-manifest.json'),
    '//domain.cookieless.com'
);

$bucket->url('css/app.css');
//result: //domain.cookieless.com/build/css/app.af316426ea1d10021f3f17ce8031f93c2.css

$bucket->url('js/app.js');
//result: //domain.cookieless.com/build/js/app.56fa630905267b809161e71d0f8a0c017b.js

自定义版本化

您可以通过实现VersionedInterface接口来创建自己的自定义版本化类。

这就完了!希望这能帮到您 ;)