https://github.com/howardabrams/jake-utils
Functions for making jake a little nicer
https://github.com/howardabrams/jake-utils
Last synced: about 1 year ago
JSON representation
Functions for making jake a little nicer
- Host: GitHub
- URL: https://github.com/howardabrams/jake-utils
- Owner: howardabrams
- Created: 2012-03-14T10:45:44.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2013-04-12T03:44:49.000Z (about 13 years ago)
- Last Synced: 2025-04-23T22:38:47.269Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 158 KB
- Stars: 6
- Watchers: 2
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
The `jake-utils` is a collection of useful functions for using [Jake][3].
**Note:** As a package, it does un-orthodox things like creating
global functions and attempting to make everything run synchronously.
This design decision was made in order to be consistent with Jake, and
behave similarly to a "build system".
[3]: https://github.com/isaacs/node-jake
Usage
-----
In your `Jakefile`, simply add the following code near the top:
require('jake-utils');
You will then have a number of functions you an use.
Mocha Tests
-----------
My favorite test harness is [Mocha][1].
You can now do something like:
mochaTests({
directory: "test",
files : /test\-.*\.js/,
coverage : true,
reporter : 'tap',
output : 'test/results.tap'
});
This restores the `console.log()` before running any of the tests.
**Note:** Using Mocha with [log4js][2] means that your TAP results get wonky
when all `console.log()` calls get interspersed with the TAP code.
[1]: https://github.com/visionmedia/mocha
[2]: http://log4js.berlios.de/
Display Messages
----------------
You can have obnoxious headers around your tasks, to make it stand out
more when you are looking at builds on Jenkins.
task('api', function() {
start("Generating the Internal Documentation");
// ...
end("View documents in '%s'", apidest);
});
Lint Analysis using JSHint
--------------------------
We have a nice wrapper around the [JSHint][4] utility for analyzing all
the files found in the directories specified. For example:
desc("Lints all of the script files in the source directories");
task('lint', function(){
start("Analyzing the Script Files");
var codelib = [ 'services' , 'routes', 'resources' ];
lint( codelib );
end();
});
[4]: https://github.com/jshint/node-jshint/
Concatenate files
--------------------------
The method `concat` is available to concatenate multiple files into one.
The method resolves patterns in filenames, and has options to add a header,
separators, and a footer to the concatenated file. Example:
desc("Concatenates all source files into library");
task('concat', function(){
start("Concatenating the source files");
var result = concat({
src: [
'./src/main.js',
'./src/extra.js',
'./src/functions/**',
],
dest: './lib/mylibrary.js', // optional
header: '// license information...', // optional
separator: '\n', // optional
footer: '// the end...' // optional
});
// returned result is an object containing:
// {String} code The concatenated data
// {String} src The list with resolved filenames
end();
});
Markdown File Conversion
------------------------
The `markdown` function converts a markdown-formatted file into an HTML file using the
[marked parser](https://github.com/chjj/marked).
desc("Converts README into HTML File);
task('readme', function(){
start("Converting the README into a web page");
markdown( "README.md", "pub/README.html");
end();
});
The function takes an optional third parameter for `marked`-specific options.
Minify using uglify-js
--------------------------
The method `minify` is available to minify a source file using [uglify-js][5].
The method accepts one source file, or an array with multiple source files, and
resolves patterns in the filenames. Example:
desc("Minify the library");
task('minify', function(){
start("Minifying library");
var result = minify({
src: './lib/mylibrary.js',
dest: './lib/mylibrary.min.js', // optional
options: {}, // uglify-js options. optional
header: '// license information...', // optional
separator: '\n', // optional
footer: '// the end...' // optional
});
// returned result is an object containing:
// {String} code The concatenated data
// {String} src The list with resolved filenames
end();
});
[5]: https://github.com/mishoo/UglifyJS2
Replace patterns in files
--------------------------
The method `replace` can be used to replace patterns in files, for example to
fill in today's date or the version number of the package. The patterns can
be a string or a regular expression. The list with source files can contain
patterns. Example:
desc("Replace version and date in source files");
task('replace', function(){
start("Replace version and date in source files");
var result = replace({
replacements: [
{pattern: '@@date', replacement: today()},
{pattern: '@@version', replacement: version()}
},
src: [
'main.js',
'other/*.js'
]
});
// returned result is an object containing:
// {String} src The list with resolved filenames
end();
});
[5]: https://github.com/mishoo/UglifyJS2
Utility functions
--------------------------
Other utility methods are:
var p = pkg(); // package.json contents
var v = version(); // version number from package.json
var d = today(); // formatted date of today
var data = read(filename); // read data (fs.readFileSync)
write(filename, data); // write data (fs.writeFileSync)