modulesloader

0.5.1 • Public • Published

moduleLoader.nodejs

A Strategy Loader pattern to load modules in a hMVC way

How to use

require('moduleLoader');

After this require, the include function will be register in the global scope, the idea is to require this module in yout main entry point

Examples

From any module, or javascript file in the code:

include('module!Employees') ==> modules/Employees/controllers/Employees.js
include('module!Providers') ==> modules/Providers/controllers/Providers.js

include('service!system') ==> services/system/system.js
include('service!Database') ==> services/Database/Database.js

Inside of a module, i.e. Employees:

include('model!Employees') ==> modules/Employees/models/Employees.js
include('model!personal/Phones') ==> modules/Employees/models/personal/Phones.js
include('model!jobs/Kinds') ==> modules/Employees/models/jobs/Kinds.js
include('helper!LDAPConnector') ==> modules/Employees/helpers/LDAPConnector.js
include('view!personalDetails') ==> modules/Employees/views/personalDetails.js
include('template!personalDetails') ==> modules/Employees/templates/personalDetails.js
include('widget!phones') ==> modules/Employees/widgets/phones.js

Customization

You can change the basePath, the default base path is the directory from your main entrypoint. But you can change this using include.setBasePath().

Also you can create and modify the internal strategys (model,helper,view,template,widget). You are able to change the normal loader ('require') for a customized callback, this is usable for example to get templates (in plain/text) or json files or any another kind of types (a querys list in xml, css, etc...) in order to do this:

Create your own strategy

const {AbstractStrategy} = require('modulesLoader');

class Plugin extends AbstractStrategy {
	constructor(handlerOps) {
		super(handlerOps);
		this._baseDir = 'plugins';
	}

	resolve(kind, moduleName) {
		return this._baseDir + '/' + moduleName + 'Plugin.js';
	}

	getHandlers() {
		return ['plugin'];
	}

	load(path) {
		return super.load(path);
	}
};

include.registerStrategy(Plugin);

Modify the current ones

const {ModuleStrategy} = require('modulesLoader');
const moduleStrategy = include.getStrategy(ModuleStrategy);

moduleStrategy.addKind('part', 'parts/');

// now you can get include('part!partName') inside a module!

moduleStrategy.removeKind('template');
moduleStrategy.addKind('template', 'templates/', '.tmpl', function(absolutePath) {
	return yourFavouriteTemplateProcessor(absolutePath);
});

Dependencies (0)

    Dev Dependencies (1)

    Package Sidebar

    Install

    npm i modulesloader

    Weekly Downloads

    2

    Version

    0.5.1

    License

    MIT

    Last publish

    Collaborators

    • danyg