0.1.3 • Public • Published


Build Status npm version

Acqua is a NodeJS Module Loader + Dependency Injection now with code hotswap (test your code without restart).

available functions

get ( name ) : retrieve a module by it's name from the context

add ( name , $module ) : adds a module to the context

importModule ( $module ) : this function will execute the function call and then add to the context

loadDir ( dir ) : loads an entire directory recursively, searching for .js files to import

exec ( func ) : this function will execute the "func" function injecting all dependencies based on function args


createNamespace ( name ) : will create an acqua instance namespace and return the instance

namespace ( name ) : will return a previously namespace instance

acqua dependencies

Acqua may have dependency to other acqua instances, so when a module is not found while loading modules, acqua will lookup on dependencies.

var acqua = new Acqua({
    dependencies : [ anotherAcqua ]


To use Acqua on your project, just add the commands bellow to your main file.

var acqua = new Acqua({
	log : console.log, // used to log module imports, optional
	err : console.err  // used to log errors on module imports, optional

acqua.loadDir(__dirname + '/models');
acqua.loadDir(__dirname + '/services');
acqua.loadDir(__dirname + '/routers');


Modules must be functions, and all dependencies must be the function arguments, all modules have to return an object reference;

moduleName.$inject = ['acqua']; // <- optional, to allow minification or to use aliases
module.exports = function moduleName (acqua) {
	this.acqua = acqua;

the other module can inject the dependency for the first module

module.exports = function anotherModule (moduleName) {
	this.moduleName = moduleName;

Note: Modules without name will be executed, but not added to the context;

It's also possible to pass a custom import function to loadDir, for example

acqua.loadDir(__dirname + '/models', function(path, thiz) {
    // thiz === acqua === true
    var model = sequelize.import(path);
    thiz.add(, model);

Note: All load functions are sync and are meant to be called on startup.

It's possible to exec a function loading all dependencies

acqua.exec(function (dependencyOne, dependencyTwo) {
    // function call

Now introducing hotswap to watch file changes and test it instantly

var acqua = new Acqua({
    hotswap : true

// only if you want to watch over file changes
acqua.on('change', changes => console.log(changes));


Sérgio Marcelino (


This project is licensed under MIT


npm i acqua-lib

DownloadsWeekly Downloads






Unpacked Size

53.9 kB

Total Files


Last publish


  • rosil