/mini-asset

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

Primary LanguagePHPMIT LicenseMIT

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.