mini asset

A simple set of asset build tools that provides a config file and extensible integrations with pre-processors & minifiers.

64
17
PHP

Mini Asset

Software License
Build Status
codecov.io
Total Downloads

Mini Asset is a small footprint library that provide tools to assist in
building an asset minification/optimization pipeline. It uses a simple INI
based configuration file that lets you define output files, that are comprised
of a number of input files. Input files can be processed by filters on
a per-extension or per file basis. Filters allow you to integrate existing
pre-processors and minifiers or build your own.

Features

  • Built-in support for LESScss, Sass and CoffeeScript, as well as several
    minifiers.
  • Powerful and flexible filter system allowing you to add your own
    minifiers/pre-processors.
  • Simple ini configuration files.
  • Incremental builds that don’t recompile assets when they don’t need to be.
  • Command Line Tools for building and clearing assets.

Installing

Add this library to your application with composer, after that you can
start integrating MiniAsset into your application and use the provided CLI tools
to generate asset targets:

php composer.phar require 'markstory/mini-asset'

Usage

Before MiniAsset can do anything, you’ll need to define a configuration file to
define your asset and which filters apply to them. For example purposes, we’ll assume
you have some CSS files that need to be minified.

Defining a configuration file

In your application’s configuration directory create a file called
assets.ini. In this file we’ll put all the configuration that MiniAsset
needs. We’ll cover how to use multiple configuration files later on. Assuming your,
application has a app.css and reset.css put the following in your config file:

[css]
cachePath = WEBROOT/cache_css/
paths[] = WEBROOT/css/*
filters[] = SimpleCssMin

[app.css]
files[] = reset.css
files[] = app.css

The above also assumes that WEBROOT resolves to your application’s document
root. In the above we defined a few sections. First, the [css] section defines how all
CSS files should behave:

  • The cachePath option tells MiniAsset where to store generated assets.
  • The paths[] options tell MiniAsset where to find CSS files. Paths use glob syntax.
  • The filters[] options let you configure which filters are applied to all CSS files.
    Filters are applied in the order they are defined.

We also defined an [app.css] section. This section defines the files that are used to
create WEBROOT/cache_css/app.css when it is generated. We’ve added two files.

See the sample configuration file
for an annotated sample configuration file.

Use the CLI tool to build your asset

With a build target defined, we can now generate our asset. We can use the CLI
tool to generate our assets:

vendor/bin/mini_asset build --config /path/to/assets.ini

The above should generate output indicating that the all.css file we defined
was compiled. If we were to re-run the above command all.css would be skipped.
MiniAsset is smart enough to know when the components of a build target change and
only re-build files when it is necessary.

You can also use the mini_asset CLI tool to clear targets:

vendor/bin/mini_asset clear --config /path/to/assets.ini

PSR7 Middleware

Mini-asset provides a PSR7 middleware adapter that implements the pattern found in
zendframework/zend-stratagility and SlimPHP. Before you can use the middleware provided by
mini-asset be sure to setup a config file with your assets. Next, integrate mini-asset into your
middleware stack. For example in a SlimPHP app you would do:

use MiniAsset\AssetConfig;
use MiniAsset\Middleware\AssetMiddleware;

$assetConfig = AssetConfig::buildFromIniFile(__DIR__ . '../config/assets.ini');
$assets = new AssetMiddleware($assetConfig);

$app->add($assets);

Framework Integrations

Issues

Please report any issues you have with the plugin to the issue
tracker
on github.

License

Mini Asset is offered under an MIT license.

Copyright

2010-2018 Mark Story (http://mark-story.com)

Authors

See the github contributors list.

Changelog

See CHANGELOG for changes only available on master. See
github releases for changelogs on previous releases.