New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

fisharebest/laravel-assets

Asset management for Laravel
8,139 20
Install
composer require fisharebest/laravel-assets
Latest Version:2.1.0
Laravel:5 – 8
License:GPL-3.0-or-later
Last Updated:Jul 15, 2021
Links: GitHub  ·  Packagist
Maintainer: fisharebest

Latest Stable Version Unit tests Coverage Status SymfonyInsight Scrutinizer Code Quality

laravel-assets

Simple, flexible asset management for Laravel 5 - 8. Combine and minify your CSS and JS files to make your website faster.

Installation

Add the dependency to composer.json:

composer require fisharebest/laravel-assets

Starting with Laravel 5.5, packages are discovered automatically. For earlier versions, you must add the service provider and facade to config/app.php.

return [
    'providers' => [
        Fisharebest\LaravelAssets\AssetsServiceProvider::class,
    ],
    'aliases' => [
        'Assets' => Fisharebest\LaravelAssets\AssetsFacade::class,
    ],
]

Create a configuration file, config/assets.php, containing default values. Edit the settings in this file to match your project’s directory structure.

$ php artisan vendor:publish --provider="Fisharebest\LaravelAssets\AssetsServiceProvider"

Step 1. How to add assets

You would usually add assets in each of your templates (layouts, views, partials, etc.) that requires them.

<!-- resources/views/layouts/master.blade.php -->
<?php Assets::add(['jquery', 'bootstrap', 'global.js', 'style.css', 'analytics.js']) ?>
<!-- the rest of your view ... -->
<!-- resources/views/pages/list.blade.php -->
<?php Assets::add('list.js') ?>
<!-- the rest of your view ... -->

Of course, you could also add assets anywhere you choose; controllers, helpers, etc.

As well as individual files, you can add named collections of files. These are defined in config/assets.php.

Where you have dependencies, you should list the files in the order they should be loaded. For example, if list.js depends on jQuery, you would specify jQuery before list.js.

<!-- resources/views/pages/list.blade.php -->
<?php Assets::add(['jquery', 'list.js']) ?>
<!-- the rest of your view ... -->

Duplicates are ignored, so you can add jQuery to each view that uses it and it will only be rendered once.

It is conventional to render CSS assets in the <head> element, and JS assets at the end of the <body> element.

<!-- resources/views/layouts/master.blade.php -->
<html>
    <head>
        {!! Assets::css() !!}
    </head>
    <body>
        ...
        {!! Assets::js() !!}
    </body>
</html>

But what if…

What if my assets don't have a .js or .css extension?

Specify the type as a parameter when adding the assets. For example,

Assets::add('http://example.com/script?parameter', 'js')

What if I want to divide my assets into separate groups?

Specify the group as a parameter when adding and rendering assets.

<!-- resources/views/layouts/master.blade.php -->
<?php Assets::add('jquery.js') ?>
<?php Assets::add('ie8.js', null, 'ie8') ?>
<?php Assets::add('analytics.js', null, 'head-script') ?>
<html>
    <head>
        ...
        <!--[if lte IE 8]>{!! Assets::js('ie8') !!}<![endif]-->
        {!! Assets::js('head-script') !!}
    </head>
    <body>
        ...
        {!! Assets::js() !!}
    </body>
</html>

What if I want to add additional attributes to the style/script?

Specify a list of attributes as an argument to the render functions.

{!! Assets::css('print', ['media' => 'print']) !!}
{!! Assets::js('analytics', ['async']) !!}

What if I my asset files are tiny?

There's a configuration option inline_threshold. Any asset file smaller than this number of bytes will be rendered inline, thus saving an HTTP request.

What if I want to change the configuration at runtime?

Configuration can be changed at any time. It only takes effect when the assets are rendered.

Assets::setGzipStatic(6);
Assets::css(); // will create compressed assets

What if I want to use my own minifier?

Write your own filter (implement Fisharebest\LaravelAssets\Filters\FilterInterface) and specify it in the configuration file config/assets.php. Use one of the existing filters as a template.

Specify a URL in the destination_url setting which corresponds to the folder given in destination.

// config/assets.php
return [
    'destination'     => 'min',                   // We create assets here
    'destination_url' => 'http://my-cdn.com/min', // Users read assets from here
]

What if I need to copy my pipelined assets to an external server?

Write your own notifier (implement Fisharebest\LaravelAssets\Notifiers\NotifierInterface) and specify it in the configuration file config/assets.php. Use one of the existing notifiers as a template.

You would most likely set the destination_url to your CDN server, and add a notifier which copies the file from the destination folder to this server.

What if I cannot use file_get_contents() because of firewall/proxy issues?

Write your own loader (implement Fisharebest\LaravelAssets\Loaders\LoaderInterface) and specify it in the configuration file config/assets.php. Use one of the existing loaders as a template.

How do I delete old files after I update my assets or change my filters?

There is an artisan command for that.

php artisan assets:purge

Related Packages

stolz/assets

An ultra-simple-to-use assets management library

555,094 286
fluentkit/asset

Simple Laravel Asset management

87 0
tooleks/laravel-asset-version

The Laravel Assets Versioning Package

47,866 7
mmanos/laravel-casset

An asset management package for Laravel 4.

2,621 10
simexis/laravel-casset

An asset management package for Laravel 5.

141 1

Version History

Version Released Laravel License
2.1.0 5 - 8 GPL-3.0-or-later
2.0.0 GPL-3.0
1.6.1 GPL-3.0
1.6.0 GPL-3.0
1.5.2 GPL-3.0