Noder.io

Noder.io provides a lightweight and flexible core to create a scalable API of a lib, a module, an application or a framework.
It is useful for starting a project quickly with a modular API ready to use.
Noder.io (and any object built on top of Noder.io) integrates:
No dependencies, works on Node.js and in the browser (only 4kb).
Quick start
See quickstart.
Usage
Get common instance of Noder:
var noder = require('noder.io');
Best practice, create an instance of Noder class for your project:
var Noder = require('noder.io').Noder;
var api = new Noder();
module.exports = api;
or shortcut:
module.exports = require('noder.io').createNoder();
Use your API in another file:
var api = require('./api');
api.use('pluginName');
api.$di.set('someItem', 'value of the item');
Collection
Noder.io provides a class to handle a collection of items.
var items = noder.createCollection();
items.set('keyName', 'key value');
console.log(items.get('keyName'));
var all = items.getAll();
console.log(items instanceof noder.Collection);
See collection.
Dependency Injection
See dependency injection.
Lazy loading
noder.$require method provides a lazy require():
noder.$require('mongoose');
console.log(noder.$require.isLoaded('mongoose'));
var mongoose = noder.mongoose;
console.log(noder.$require.isLoaded('mongoose'));
console.log(noder.mongoose === require('mongoose'));
Aliases:
noder.$require('promise', 'bluebird');
console.log(noder.promise === require('bluebird'));
Custom loader:
noder.$require('fs', function() {
return noder.promise.promisifyAll(require('fs'));
});
fs.readFileAsync('./any-file.js')
.then(function(contents) {
console.log(contents);
})
.catch(function(err) {
console.error(err);
})
;
See lazy loading.
Plugins
Noder.io provides a plugin system to make a package works as a plugin for Noder.io and also as a standalone module or library.
Example of a Noder plugin:
module.exports = function blog() {
var Noder = require('noder.io').Noder;
var noder = new Noder();
return module.exports.__noder(noder);
};
module.exports.__noder = function blogPlugin(noder) {
noder.$di.addOnce('config', {}, true);
noder.use(require('./api/article'));
noder.use(require('./api/comment'));
noder.use(require('./api/admin'));
return noder;
};
See plugins.
Unit Tests
Noder.io is fully tested with Unit.js and Mocha.
License
MIT (c) 2013, Nicolas Tallefourtane.
Author