Ich fand die von Dominic vorgeschlagene Lösung die beste, aber es fehlt immer noch eine Funktion der "const" -Deklaration. Wenn Sie eine Konstante in JS mit dem Schlüsselwort "const" deklarieren, wird das Vorhandensein der Konstante zur Analysezeit und nicht zur Laufzeit überprüft. Wenn Sie also den Namen der Konstante irgendwo später in Ihrem Code falsch geschrieben haben, wird eine Fehlermeldung angezeigt, wenn Sie versuchen, Ihr Programm node.js zu starten. Welches ist eine weitaus bessere Rechtschreibfehlerprüfung.
Wenn Sie die Konstante mit der Funktion define () definieren, wie von Dominic vorgeschlagen, wird kein Fehler angezeigt, wenn Sie die Konstante falsch geschrieben haben, und der Wert der falsch geschriebenen Konstante ist undefiniert (was zum Debuggen von Kopfschmerzen führen kann).
Aber ich denke, das ist das Beste, was wir bekommen können.
Außerdem gibt es hier eine Art Verbesserung der Dominic-Funktion in constans.js:
global.define = function ( name, value, exportsObject )
{
if ( !exportsObject )
{
if ( exports.exportsObject )
exportsObject = exports.exportsObject;
else
exportsObject = exports;
}
Object.defineProperty( exportsObject, name, {
'value': value,
'enumerable': true,
'writable': false,
});
}
exports.exportObject = null;
Auf diese Weise können Sie die Funktion define () in anderen Modulen verwenden und Konstanten sowohl innerhalb des Moduls constants.js als auch innerhalb Ihres Moduls definieren, von dem aus Sie die Funktion aufgerufen haben. Das Deklarieren von Modulkonstanten kann dann auf zwei Arten erfolgen (in script.js).
Zuerst:
require( './constants.js' );
define( 'SOME_LOCAL_CONSTANT', "const value 1", this ); // constant in script.js
define( 'SOME_OTHER_LOCAL_CONSTANT', "const value 2", this ); // constant in script.js
define( 'CONSTANT_IN_CONSTANTS_MODULE', "const value x" ); // this is a constant in constants.js module
Zweite:
constants = require( './constants.js' );
// More convenient for setting a lot of constants inside the module
constants.exportsObject = this;
define( 'SOME_CONSTANT', "const value 1" ); // constant in script.js
define( 'SOME_OTHER_CONSTANT', "const value 2" ); // constant in script.js
Wenn Sie möchten, dass die Funktion define () nur vom Konstantenmodul aufgerufen wird (um das globale Objekt nicht aufzublähen), definieren Sie sie wie folgt in constants.js:
exports.define = function ( name, value, exportsObject )
und benutze es so in script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports
. Was ist daran unangenehm?