slush
The streaming scaffolding system - Gulp as a replacement for Yeoman
Use Gulp instead of Yeoman
Slush is a tool to be able to use Gulp for project scaffolding.
Slush does not contain anything "out of the box", except the ability to locate installed slush generators
and to run them with liftoff
.
To be able to provide functionality like Yeoman, see: Yeoman like behavior below.
Install
Install slush
globally with:
npm install -g slush
Usage
slush <generator>[ <tasks>]
Note if <tasks>
is not provided it will default to the default
task in the generator's slushfile.
List available generators
slush
List available tasks in generator
slush <generator> --tasks
Creating a generator
A Slush generator is an npm package following the naming convention slush-*
and containing a slushfile.js
.
Add slushgenerator
as a keyword in your package.json
.
As when building gulp plugins all slush generators need to have gulp
installed as a local dependency.
All slush-*
packages should be installed globally (for now) to be found by the slush executable.
Note remember to add gulp plugins (and gulp itself) as ordinary dependencies, instead of devDependencies, when building a slush generator.
Documentation
Things to remember
- Install
slush
globally - Install slush generators globally
- When creating slush generators:
- name them
slush-<name>
- add
slushgenerator
as package keyword - create a slushfile.js
- Install
gulp
and used gulp plugins for your generator as ordinary dependencies
Slush uses gulp
Slush is just the global excutable to trigger slush generators, under the hood it's still gulp that is run using each slushfile as config file.
Needing help writing slush generators? Check out Gulp's documentation!
The slushfile
A slushfile is basically a gulpfile, but meant to be used to scaffold project structures.
Why not name it "gulpfile" then?
Because a Slush generator may want to use gulp locally for linting, testing and other purposes, in which case it will need to have a gulpfile.
Sample slushfile
Given a slush generator project structure with a web app project template inside ./templates/app/
, a slushfile could be designed like this:
var gulp = require('gulp'),
install = require('gulp-install'),
conflict = require('gulp-conflict'),
template = require('gulp-template'),
inquirer = require('inquirer');
gulp.task('default', function (done) {
inquirer.prompt([
{type: 'confirm', name: 'app', message: 'Create a new app?'},
{type: 'confirm', name: 'another', message: 'Something else?'}
],
function (answers) {
if (!answers.app) {
return done();
}
gulp.src(__dirname + '/templates/app/**')
.pipe(template(answers))
.pipe(conflict('./'))
.pipe(gulp.dest('./'))
.pipe(install())
.on('end', function () {
done();
});
});
});
Yeoman like behavior
Use these packages/plugins:
- inquirer - To prompt the user for input
- gulp-install - To install npm and bower packages after scaffolding
- gulp-conflict - To prompt before overwriting files on regeneration
Want to contribute?
Anyone can help make this project better!