承接 germania-kg/asset-timestamper 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

germania-kg/asset-timestamper

Composer 安装命令:

composer require germania-kg/asset-timestamper

包简介

File modification timestamps for your website assets.

README 文档

README

File modification timestamps for your website assets.

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

This Callable looks for a given asset file (e.g. CSS, JS usually) in a base directory, extracts its modification time and returns a modified asset path that contains that very timestamp.

For remote files, no timestamps will be added. AssetTimestamper will check for host entry in PHP's parse_url's result array.

See Chris Coyier's article “Strategies for Cache-Busting CSS”, chapter “Changing File Name“. Please note — As Chris Coyier points out, this technique may slow down server response. Using this technique for only some files should be fine, be aware to not over-use it.

Installation with Composer

$ composer require germania-kg/asset-timestamper

Alternatively, add this package directly to your composer.json:

"require": {
    "germania-kg/asset-timestamper": "^2.0"
}

Upgrade from v1

In v1, a FileException was thrown if a given asset did not exist. As of version 2, the original asset file name will be returned. If you have not seen this FileException until now, you will have to do nothing. All others have to remove FileException catch blocks.

Deprecation warning: The FileException class is still available with this package and will be removed in Release Version 3. Discuss at issue #1.

Usage

You do not need to have a leading directory separator slash, as it will internally be “glued in” if neccessary. However, the result will have (or miss) the slash, depending on how you pass in the asset file name.

<?php
use Germania\AssetTimestamper\AssetTimestamper;

// Instantiation
$at = new AssetTimestamper;

// Both are equal
echo $at( '/dist/styles.css' );
echo $at->__invoke( '/dist/styles.css' );

//even those, missing leading slash:
echo $at( 'dist/styles.css' );
echo $at->__invoke( 'dist/styles.css' );


// Outputs something like:
"/dist/styles/styles.20160522140459.css"

Using different base paths

You can define a custom directory where AssetTimestamper should look for the assets. This is useful when your assets are located in a directory accessed via another (sub-)domain. Let's say your project directory looks like this:

# Your current work dir, usually "www" subdomain
/var/www/project/htdocs

# Static files on a "static" subdomain
/var/www/project/static
/var/www/project/static/dist/styles.css

Examples for PHP and HTML:

Use AssetTimestamper with another base directory:

<?php
// Instantiation
$at = new AssetTimestamper( "/var/www/project/static" );

echo '<link rel="stylesheet" type="text/css" href="//static.test.com'
     . $at( '/dist/styles.css' ) . '">';

HTML Output:

<link rel="stylesheet" type="text/css" href="//static.test.com/dist/styles.20160522140459.css">

Simple Twig Example

echo $twig->render("website.tpl", [
	'stylesheets' => [
		$at( 'dist/styles.css' ),
		$at( 'dist/widget.css' )
	]
]);

Alternative Twig Integration: Filter

Since AssetTimestamper is invokable and a Callable, it can be easily used as a Twig SimpleFilter:

<?php
$at     = new AssetTimestamper( "/var/www/project/static" ),
$filter = new Twig_SimpleFilter('add_timestamp', $at),

$twig->addFilter( $filter );

So rendering a website like this:

echo $twig->render("website.tpl", [
	'stylesheets' => [
		'dist/styles.css',
		'dist/widget.css'
	]
]);

…using this Twig template …

{% for css in stylesheets %}
<link rel="stylesheet" href="//static.test.com/{{ css|add_timestamp }}">
{% endfor %}

… will lead to this output:

<link rel="stylesheet" href="//static.test.com/dist/styles.20160419100233.css">
<link rel="stylesheet" href="//static.test.com/dist/widget.20160413152259.css">

.htaccess

Since browsers will request the modified file name (which in fact does not exist, at least with this name), you will have to rewrite the URL in your .htaccess, like so:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.(\d+)\.(js|css)$ $1.$3 [L]

See Chris Coyier's article “Strategies for Cache-Busting CSS”, chapter “Changing File Name“, and Stefano's comment on this.

Issues

No issues known so far, feel free to create one at issues page.

Development

$ git clone https://github.com/GermaniaKG/AssetTimestamper.git
$ cd AssetTimestamper
$ composer install

Unit tests

Either copy phpunit.xml.dist to phpunit.xml and adapt to your needs, or leave as is. Run PhpUnit test or composer scripts like this:

$ composer test
# or
$ vendor/bin/phpunit

germania-kg/asset-timestamper 适用场景与选型建议

germania-kg/asset-timestamper 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 164 次下载、GitHub Stars 达 0, 最近一次更新时间为 2016 年 08 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 germania-kg/asset-timestamper 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 germania-kg/asset-timestamper 我们能提供哪些服务?
定制开发 / 二次开发

基于 germania-kg/asset-timestamper 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 164
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-08-25