Assemble pipeline plugin for handling custom middleware stages.
npm install assemble-handle> Assemble pipeline plugin for handling custom middleware stages.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Install with npm:
``sh`
$ npm install --save assemble-handle
`js`
const handle = require('assemble-handle');
Handle middleware for the given middleware "stage".
`js`
app.task('default', function() {
return app.src('*.js')
.pipe(handle(app, 'handlerName')) //<= handle middleware
.pipe(app.dest('foo'))
});
Example
`js
const assemble = require('assemble');
const handle = require('assemble-handle');
const app = assemble();
/**
* create some middleware "stages"
*/
app.handler('onStream');
app.handler('preWrite');
app.handler('postWrite');
/**
* Create middleware
*/
app.onStream(/\.(js|css)$/, function(file, next) {
// lint javascript
next();
});
app.preWrite(/\.(jpg|png)$/, function(file, next) {
// minify images
next();
});
app.postWrite(/./, function(file, next) {
// create files tree or something
next();
});
/**
* Run (handle) the middleware
*/
app.task('site', function() {
return app.src('assets/*/.*')
.pipe(handle(app, 'onStream')) // handle onStream
.pipe(handle(app, 'preWrite')) // handle preWrite
.pipe(app.dest('site/'));
.pipe(handle(app, 'postWrite')) // handle postWrite
});
`
A .once method is exposed, which has the same exact behavior as the main function, but will ensure that middleware is only handled once for a given "stage".
Example
For example the given middleware will only run once.
`js
const assemble = require('assemble-core');
const handle = require('assemble-handle');
const app = assemble();
app.handler('onFoo');
app.onFoo(/./, function(file, next) {
file.count = file.count || 0;
file.count++;
next();
});
app.task('handle-once', function(cb) {
let files = [];
app.src('test/*/.*')
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.on('data', function(file) {
files.push(file);
})
.pipe(app.dest('test/actual'))
.on('end', function() {
console.log(files[0].count);
//=> 1
cb();
});
});
app.task('handle', function(cb) {
let files = [];
app.src('test/*/.*')
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.on('data', function(file) {
files.push(file);
})
.pipe(app.dest('test/actual'))
.on('end', function() {
console.log(files[0].count);
//=> 5
cb();
});
});
`
Create custom middleware handlers.
`js`
app.handler('onFoo');
This adds an .onFoo method to the instance:
`js`
app.onFoo(/\.hbs$/, function(file, next) {
// do stuff to file
next();
});
All .onFoo middleware will now run when the onFoo handler is called:
`js
app.task('default', function() {
return app.src('*.hbs')
// call the onFoo handler`
.pipe(handle(app, 'onFoo'))
});
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
`sh`
$ npm install && npm test
Building docs
_(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)_
To generate the readme, run the following command:
`sh``
$ npm install -g verbose/verb#dev verb-generate-readme && verb
You might also be interested in these projects:
* assemble-core: The core assemble application with no presets or defaults. All configuration is left to the… more | homepage
* assemble-fs: Light wrapper for vinyl-fs to add streams support in a way that plays nice with… more | homepage
* assemble-streams: Assemble pipeline plugin for pushing views into a vinyl stream. | homepage
* assemble: Get the rocks out of your socks! Assemble makes you fast at creating web projects… more | homepage
| Commits | Contributor |
| --- | --- |
| 17 | jonschlinkert |
| 3 | doowb |
Jon Schlinkert
* GitHub Profile
* Twitter Profile
* LinkedIn Profile
Copyright © 2018, Jon Schlinkert.
Released under the MIT License.
*
_This file was generated by verb-generate-readme, v0.8.0, on December 11, 2018._