calzone v0.0.3
calzone
A command-line, project-based wrapper around gulp in an attempt to make JavaScript builds more fun and less complicated.
Installation
Install with npm:
npm install -g calzoneThis will expose a command-line utility that can be run with:
$ calzone --help # for example...Overview
calzone takes build hints from two sources:
- Build configuration defined explicitly in a
.builders.jsonfile - An
/* @build ... */annotation in your source file
The program will then create gulp streams and build your files. By default, calzone assumes a directory structure like the following:
src/
=> all your files...
build/
=> where calzone directs gulp.dest() to put filesThis directory structure can be overridden by options in .builders.json.
Example Usage
Say we have the following directory structure:
src/
index.js
util.jsand suppose our index.js is written in ECMAScript 7, and we need to transpile it using Babel:
/* @build babel |> uglify({ preserveComments: false }) */
import util from './util'
async function main() {
await util.longRunningOperation()
console.log('Done.')
}
main()First, you'll notice that our file declaratively defines how it is intended to be built with the @build annotation build-hint. In this example, we declare that our file should be piped through two builders: babel and uglify. Piping is designated using the pipe-operator |>. Furthermore, configuration data can be passed to each builder as is seen with passing { preserveComments: false} to the uglify builder.
Builders
Options (and builders) are defined in your .builders.js file. For example, if you have a LESS file with a build-annotation like /* @build less */, you may define a builder like:
// .builders.js
var autoprefixer = require('gulp-autoprefixer')
var less = require('gulp-less')
module.exports.builders = {
less: function() {
return this.pipe(less())
.pipe(autoprefixer())
}
}As demonstrated, builders take the current stream via this, and must return the resulting stream.
@build annotation
The build-annotation's pseudo-grammar can be defined by the following:
@build (builder |>)* builder?
builder: name params?
params: (json-object)Project settings:
You may also override many of calzone's settings by creating a .builders.json file:
{
"src": "src/directory",
"out": "output/directory",
"files": {
"src/index.js": [ { type: "babel" }, { type: "uglify", config: { preserveComments: false } } ],
"src/public/web-app.js": [ { type: "webpack" } ]
}
}Default Builders
calzone defines a few default builders for your convenience, assuming their appropriate packages are installed in your local node_modules directory:
- autoprefixer
- babel
- coffee
- less
- react
- uglify
- webpack
So, if you have gulp-autoprefixer installed in your local node_modules folder, you may make use of this builder (for example, via /* @build less */), without defining it in your .builders.js file.