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 und private Variablen und Methoden. Diese sind hier als external und internal bezeichnet, da public und private 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.


Andere Artikel zum Thema · · · ·

Zuletzt geändert am

fboës - Der Blog