eggnog
What require() should be.
See the wiki for complete documentation.
eggnog is a simple, lightweight dependency injection framework for NodeJs
- Designed for making modular applications easy to write
- Minimal boilerplate -- Convention over configuration
- No config files or factories to maintain -- eggnog crawls your project for you
- Dependency injection allow for easier testing
- No need to require any special dependencies in your files -- eggnog acts more like a spec than a library
Current Version: 1.3.0
Let's assume this is file structure for our application:
index.js
package.json
node_modules/
express/
...
src/
server/
index.js
utils/
config.js
src/server/index.js
module might look like:
Here's what our module { // This is pretty much the Express.js Hello World app, verbatim. // The only difference is that we use arguments to the exported function // instead of using require(). // The inline comments next to the arguments direct eggnog what to // provide for the arguments. // (Also, I'm including os just to show how to load core modules.) var app = ; app; var server = app; return app;};
src/utils/config.js
looks like this:
Our // Note, this file doesn't have any dependencies, so no arguments // to its export functionmodule { return serverPort: 8080 foo: true barUser: 'Mikey' ... ;};
index.js
pulls everything together
Finally, // Note! This file needs to be at the root of our project, alongside the // node_modules and 'src' directories! var eggnog = ; // All of our source files are ./srcvar context = './src'; // context.loadModule('server/index') will find the "server/index" module in the // 'src' directory, load it and any transitive dependencies, and then execute its // function, automatically supplying its transitive dependencies as the arguments.// It returns whatever the 'server/index' module returned after it loaded.var app = context;
Launching our application is nothing special:
node index.js
That's it! eggnog will handle the rest.
What about unit testing?
var eggnog = ;var sinon = ; var context = '/src'; var express = sinon;// Set up express spy... var app = context; // Assertions follow......