koajs / Bundle
Generic asset pipeline with caching, etags, minification, gzipping and sourcemaps.
Stars: ✭ 35
Programming Languages
javascript
184084 projects - #8 most used programming language
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, root: __dirname) }, 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 sourcemaps -
minify
: minify JS and CSS -
cache
: cache responses across requests and add etags -
gzip
: gzip the response if it's supported
The default settings depend on the environment (NODE_ENV
):
-
Production:
-
debug
: false -
minify
: true -
cache
: true -
gzip
: true
-
-
Development:
-
debug
: true -
minify
: false -
cache
: false -
gzip
: 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 <[email protected]>
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].