escapework / laravel-asset-versioning
Package to help you avoid cache by versioning your assets
Installs: 36 422
Dependents: 0
Suggesters: 0
Security: 0
Stars: 44
Watchers: 9
Forks: 4
Open Issues: 0
Requires
- php: >=7.0.0
Requires (Dev)
- illuminate/console: ~5
- illuminate/filesystem: ~5
- illuminate/support: ~5
- mockery/mockery: @stable
- nesbot/carbon: 1.*
- phpunit/phpunit: ~4.0
README
Disclaimer: This package is not really maintained anymore, we recommend you use the Laravel Mix versioning instead.
Have you ever had a problem with cache in your assets? This package may help you.
Version Compatibility
Laravel | Laravel Assets Versioning |
---|---|
6.x/7.x/8.x | 0.8.x |
5.5+ | 0.7.x |
5.4.x | 0.6.x |
5.3.x | 0.5.x |
5.2.x | 0.4.x |
5.1.x | 0.3.x |
5.0.x | 0.2.x |
4.2.x | 0.1.x |
Installation
Via Composer:
$ composer require escapework/laravel-asset-versioning:"0.7.*"
And publish the configurations running the following command:
$ php artisan vendor:publish --provider="EscapeWork\Assets\AssetsServiceProvider"
Usage
Instead of using the asset
helper, you will need to use the Asset:v
method.
Imagine that your layout template has the following lines:
<link rel="stylesheet" href="{{ Asset::v('assets/stylesheets/css/main.css') }}"> <script src="{{ Asset::v('assets/javascripts/js/main.js') }}"></script>
In your local environment, nothing changes. But in production, you just need to run the following command every time you need to update your assets' version:
$ php artisan asset:dist
And your layout will be rendered as this:
<link rel="stylesheet" href="/assets/stylesheets/dist/1392745827/main.css" /> <script src="/assets/javascripts/dist/1392745827/main.js"></script>
The version is the timestamp when you performed the asset:dist
command.
This package knows which folder you need by the file extension, which is the array key in the config file.
You also can get only the path for some extension:
{{ Asset::path('css') }} <!-- /assets/stylesheets/dist/1392745827 -->
HTTP2 Server Push
You can also enable the HTTP2 Server Push header for all assets used with this package.
For that, you need to add the HTTP2ServerPush
to the middlewares of your application.
protected $middleware = [ \EscapeWork\Assets\Middleware\HTTP2ServerPush::class, ];
And that's it, your response will come with the Link
HTTP header.
If you want to add some assets that are not versioned, you can use this method:
Asset::addHTTP2Link('/assets/fonts/robotto.woff', 'font'); Asset::addHTTP2Link('/assets/css/home.css', 'css'); Asset::addHTTP2Link('/assets/js/home.js', 'js');
Configurations
Of course you can configure the folders you need. Just edit the config/assets.php
file, in the types
array.
'types' => [ 'css' => [ 'origin_dir' => 'your-custom-css-dir/css', 'dist_dir' => 'your-custom-css-dir/dist', ], 'js' => [ 'origin_dir' => 'your-custom-js-dir/js', 'dist_dir' => 'your-custom-js-dir/dist', ], 'jpg' => [ 'origin_dir' => 'assets/images', 'dist_dir' => 'assets/images/dist', ], ],
You also can add more folders by adding more items into the array.
Also, you can configure in which environments the assets are gonna be versioned.
'environments' => ['production'],
Changelog
See Changelog.
Unit tests
Just run vendor/bin/phpunit
.
License
See the License file.