bnomei / kirby3-fingerprint
File Method and css/js helper to add cache-busting hash and optional Subresource Integrity to file
Installs: 25 284
Dependents: 1
Suggesters: 1
Security: 0
Stars: 37
Watchers: 2
Forks: 3
Open Issues: 5
Type:kirby-plugin
Requires
- php: >=7.4.0
- getkirby/composer-installer: ^1.2
Requires (Dev)
- getkirby/cms: ^3.5
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^9.5
Suggests
- bnomei/kirby3-security-headers: Let's make the web a saver place – sensible defaults included.
- diverently/laravel-mix-kirby: Consider using this plugin instead if all your assets are versioned by laravel mix.
- dev-master
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.14
- 3.0.13
- 3.0.12
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.3.1
- 2.3.0
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.1
- 2.0.0
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- dev-dependabot/composer/guzzlehttp/psr7-2.5.0
- dev-dependabot/composer/getkirby/cms-3.6.6.2
- dev-dependabot/composer/guzzlehttp/guzzle-7.5.0
This package is auto-updated.
Last update: 2024-11-23 16:15:13 UTC
README
File Method and css/js helper to add cachebusting hash and optional Subresource Integrity to files.
Similar Plugins
The following plugins can do cachebusting but they do not cache the modified timestamp nor can they do SRI nor do cachebusting for non js/css files.
Installation
- unzip master.zip as folder
site/plugins/kirby3-fingerprint
or git submodule add https://github.com/bnomei/kirby3-fingerprint.git site/plugins/kirby3-fingerprint
orcomposer require bnomei/kirby3-fingerprint
Usage
This Plugin does not override the build in js/css helpers. Use
Bnomei\Fingerprint::css
andBnomei\Fingerprint::js
when you need them.
echo Bnomei\Fingerprint::css('/assets/css/index.css'); // <style> element with https://../assets/css/index.css?v=1203291283 echo Bnomei\Fingerprint::js('/assets/js/index.min.js'); // <link> element https://../assets/js/index.min.js?v=1203291283 echo Bnomei\Fingerprint::url('/assets/css/index.css'); // raw url https://../assets/css/index.css?v=1203291283 echo $page->file('ukulele.pdf')->fingerprint(); // https://../ukulele.pdf?v=1203291283 echo $page->file('ukulele.pdf')->integrity(); // sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC // generate sri from local file echo Bnomei\Fingerprint::js( '/assets/js/index.min.js', [ "integrity" => true ] ); /* <script src="https://../assets/js/index.min.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script> */ echo Bnomei\Fingerprint::js( 'https://external.cdn/framework.min.js', [ "integrity" => "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" ] ); /* <script src="https://external.cdn/framework.min.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script> */
Settings
Query option: true (default)
myfile.js?v={HASH}
This is the default since it works without additional changes to your server but be aware that query strings are not perfect.
Query option: false
If you disable the query option you also also need to add apache or nginx rules. These rules will redirect css and js files from with hash to the asset on disk.
.htaccess - put this directly after the RewriteBase
statment
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.([0-9a-z]{32})\.(js|css)$ $1.$3 [L]
Nginx virtual host setup
location ~ (.+)\.(?:\w+)\.(js|css)$ {
try_files $uri $1.$2;
}
Query option: string
You can also forward the path of a json encoded manifest file and the plugin will load whatever hash is defined there. This works great for gulp-rev or with laravel mix versioning.
Cache & Performance
The plugin will flush its cache and do not write any more caches if global debug mode is true
.
Hash and SRI values are cached and only updated when original file is modified. If you also have the AutoID Plugin and the file has an autoid field the modified lookup will be at almost zero-cpu cost.
Disclaimer
This plugin is provided "as is" with no guarantee. Use it at your own risk and always test it yourself before using it in a production environment. If you find any issues, please create a new issue.
License
It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech.
Credits
- based on @iksi https://github.com/iksi/kirby-fingerprint (Kirby V2)
- @S1SYPHOS https://github.com/S1SYPHOS/kirby-sri (Kirby V2)