Awesome
What's this?
A module that enables Express.js to serve assets built and packaged by ASPAX.
Installation
Run this in your application folder:
npm install aspax-express --save
Usage
Quick steps:
-
Create a folder structure similar to this one for your project:
/assets -> asset sources /server -> main Express.js application folder /server/public -> public static folder
Notice: put all your asset sources in
/assets
; don't put anything in/server/public
, as it will be overwritten. -
Create
/assets/aspax.yml
describing your assets configuration:js/app.js|fp|min: - lib/bootstrap/js/bootstrap.js - lib/moment.js - lib/jade/runtime.js - scripts/namespaces.coffee|bare - templates/now.jade - scripts/index.ls|bare css/app.css|fp|min: - lib/bootstrap/css/bootstrap.css - lib/bootstrap/css/bootstrap-theme.css - styles/index.styl|nib favicon.png: images/favicon.png ...
-
Install ASPAX globally if you haven’t already, install aspax-express in your application, and also make sure to install any necessary source handling plugins:
# Global ASPAX npm install aspax -g cd server # ASPAX-Express npm install aspax-express --save # Source handling plugins npm install aspax-coffee-handler --save-dev npm install aspax-ls-handler --save-dev npm install aspax-jade-handler --save-dev npm install aspax-styl-handler --save-dev
-
Add
require('aspax-express')(app, path.join(__dirname, 'aspax.json'))
before handling views in your main application script (usually/server/app.js
):var express = require('express') , app = express(); ... require('aspax-express')(app, path.join(__dirname, 'aspax.json')); app.use app.router; app.get('/:page', function(req, res) { ... });
-
Wrap the URLs in your views into
asset()
function calls://- link(rel="shortcut icon", href="/favicon.png") link(rel="shortcut icon", href=asset('favicon.png'))
-
Then, in your
/server
folder you can run:# watch and build on-the-fly during development aspax -s ../client watch # build for development aspax -s ../client build # pack for production (will compile, concat, minify and fingerprint) aspax -s ../client pack # clean everything aspax -s ../client clean
-
Run your application in development or production mode:
# development # NODE_ENV=development node start.js # ...or NODE_ENV=development nodemon -e js,json,coffee -x node # production # NODE_ENV=production node start.js
Notice: if you're using
nodemon
in development mode, addaspax.json
to.nodemonignore
to avoid restarting the application whenever an asset is rebuilt.
Have a look at this demo repository to see it in action.
What does it actually do?
In plain English, on application startup it reads the map produced by aspax pack
and registers an app.locals.asset()
method you'll have to use in your views to translate all the asset URLs.
Have a look at the main file here for details.