Nach mehrmonatigen Experimentieren habe ich für mich endlich das gelungene Pattern gefunden, mit dem ich in Node.js meine Module baue.
// module-name.js
'use strict';
const someNodeModule = require('some-node-module');
const someOwnModule = require('./some-own-module');
/**
* [modulName description]
* @constructor
*/
const modulName = function (config) {
const external = {};
const internal = {};
/**
* [someVariable description]
* @type {[type]}
*/
external.someVariable = null;
/**
* [someOtherVariable description]
* @type {[type]}
*/
internal.someOtherVariable = null;
/**
* [someFunction description]
* @params {[type]} [name] [description]
* @return {[type]} [description]
*/
external.someFunction = function () {
};
/**
* [someOtherFunction description]
* @params {[type]} [name] [description]
* @return {[type]} [description]
*/
internal.someOtherFunction = function () {
};
return external;
};
module.exports = modulName;
Der Aufruf ist dann ganz einfach:
const moduleName = require('./moduleName');
moduleName({});
Eine Erweiterung des Objekts um neue Eigenschaften geht ebenfalls flott von der Hand:
// some-other-module-name.js
'use strict';
const moduleName = require('./moduleName');
/**
* [someOtherModuleName description]
* @constructor
*/
const someOtherModuleName = function (config) {
const external = moduleName(config);
const internal = {};
// Add extra variables and methods here
return external;
};
module.exports = modulName;
Bei dieser Konstruktion sind folgende Punkte erfüllt:
- Das Modul hat
public
undprivate
Variablen und Methoden. Diese sind hier alsexternal
undinternal
bezeichnet, dapublic
undprivate
reservierte Wörter sind. - Aufruf des neuen Objektes ohne
new
. - Erweiterbarkeit ohne große Verrenkungen.
Natürlich gibt es noch unzählige andere Methoden. Aber bei dieser Methode finde ich die Mischung aus Übersichtlichkeit und Erweiterbarkeit für meine Belange am Besten.
Update: Für ECMAScript 6 wurden alle Variablendeklarationen mit const
durchgeführt. Wenn die Deklarationen abwärtskompatibel sein sollen, können diese mit var
gemacht werden.