NOTE: to use the old (original) API, use 0.10.x, the 0.12.x release breaks backwards compat, and requires additional changes before we'll be re-documenting.
Component build tool. This is the library that component(1)
utilizes
to perform component builds.
$ npm install component-builder
Creates a new Builder
for the given component's dir
:
var Builder = require('component-builder');
var builder = new Builder('components/visionmedia-page');
The component's component.json contents as an object.
Add "sourceURL" support, wrapping the module functions
in Function()
calls so that browsers may assign a
name to the scripts to aid in debugging.
Append the given dependency lookup path
. This lookup path
is
"global", thus it influences all dependency lookups.
Include development dependencies.
Add a fabricated file of the given type
, filename
,
and contents val
. For example if you were translating
a Stylus file to .css, or a Jade template to .js you may
do something like:
builder.addFile('scripts', 'view.js', 'compiled view js');
Ignore building name
's type
, where type
is "scripts" or "styles". When
no type
is given both are ignored, this includes dependencies of name
as well.
builder.ignore('visionmedia-page')
Perform the build and pass an object to fn(err, obj)
containing
the .css
and .js
properties.
A build "hook" is like an event that lets you manipulate the build in process. For
example you may use a hook to translate coffee script files to javascript automatically,
or compile a template to javascript so that it may be loaded with require()
, or use
CSS pre-processors such as rework.
Available hooks are:
before scripts
before styles
Give the builder a plugin to use. The fn
args are fn(builder [, done])
. If The plugin has async logic it should invoke the done
callback as needed. Sync plugins should ignore this argument.
The follow demonstrates the most basic build you can possible do using
this component builder implementation. A root component directory is
passed to new Builder
, followed by a .build()
call which then responds
with a res
object containing the followign properties:
.require
the require implementation script.js
compiled javascript.css
compiled css
var builder = new Builder('lib/boot');
builder.build(function(err, res){
if (err) throw err;
console.log(res.require + res.js);
console.log(res.css);
});
In the previous example all the application's private components live in ./lib
,
thus if you want to specify dependencies without a leading "lib/"
a lookup path
should be created with .addLookup()
:
var builder = new Builder('lib/boot');
builder.addLookup('lib');
...
MIT