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-bundleAPI
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
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago