koa-bundle v2.0.0
koa-bundle
Generic asset pipeline with caching, etags, minification, gzipping and sourcemaps.
The child of node-enchilada and static-cache.
Examples
- Browserify (with a callback and options)
var bundle = Bundle({ debug: true }, function(file, fn) {
Browserify({ debug: file.debug })
.add(file.path)
.transform(require('babelify'))
.bundle(fn);
}))
app.use(bundle('app.js'));
- Duo (using generators)
var bundle = Bundle(function *(file) {
return yield Duo(file.root)
.entry(file.path)
.use(require('duo-sass')())
.run();
})
app.use(bundle('app.css'));
- Gulp (using currying and globbing)
var bundle = Bundler({ root: __dirname }, function(file, fn) {
var gulp = Gulp.src(file.path, { cwd: file.root });
if ('styl' == file.type) {
gulp.pipe(styl())
.on('error', fn);
}
gulp.pipe(myth())
.on('error', fn)
if ('production' == process.env.NODE_ENV) {
gulp
.pipe(csso())
.on('error', fn);
}
gulp.on('end', fn);
});
// ... in another file, single middleware
app.use(bundle());
// multiple endpoints
bundle('app.styl');
bundle('app.js');
Installation
npm install koa-bundle
API
bundle(settings, handler) => bundler([path]) => middleware
bundle(handler)(glob) => bundler([path]) => middleware
Create a bundler with an optional set of settings
and a handler
.
A handler
can be a synchronous function, asynchronous function, generator or promise. The handler passes a File
object that has the following properties:
var File = {
type: "js",
src: "... JS ...",
path: "dashboard.js",
root: "/Users/Matt/Projects/..."
minify: true,
debug: false,
cache: true,
gzip: true,
}
The available settings
are:
debug
: enables sourcemapsminify
: minify JS and CSScache
: cache responses across requests and add etagsgzip
: gzip the response if it's supported
The default settings depend on the environment (NODE_ENV
):
Production:
debug
: falseminify
: truecache
: truegzip
: true
Development:
debug
: trueminify
: falsecache
: falsegzip
: false
The bundler returns a function that you can then pass a path
into:
var bundle = Bundler(settings, handler);
app.use(bundle('app.js'));
The path
is relative to settings.root
or process.cwd()
. The script[src]
and link[href]
is relative the root
specified.
TODO
- Warmup cache in production
- More examples
- Testing
Credits
- node-enchilada and browserify-middleware for some ideas and general design.
- static-cache for the caching, etagging and gzipping.
- sponsored by Lapwing Labs.
License
MIT
Copyright (c) 2015 Matthew Mueller <matt@lapwinglabs.com>
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago