tleckie / versioned-assets
移动资产位置很繁琐且容易出错,需要你仔细更新所有模板中包含的所有资产的URL。资产组件允许你以有序且易于维护的方式完全控制资源的路径。
1.0.2
2021-05-14 17:20 UTC
Requires
- php: ^8
Requires (Dev)
- friendsofphp/php-cs-fixer: v3.0.0-beta.2
- infection/infection: ^0.21.5
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^9.5
README
快速且强大的php版本化资产引擎
安装
您可以通过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接口来创建自己的自定义版本化类。
这就完了!希望这能帮到您 ;)