Ho trovato la soluzione suggerita da Dominic come la migliore, ma manca ancora una caratteristica della dichiarazione "const". Quando si dichiara una costante in JS con la parola chiave "const", l'esistenza della costante viene verificata al momento dell'analisi, non in fase di esecuzione. Quindi, se hai sbagliato l'ortografia del nome della costante da qualche parte più avanti nel tuo codice, otterrai un errore quando provi ad avviare il tuo programma node.js. Che è un controllo ortografico molto più efficace.
Se definisci la costante con la funzione define () come suggerito da Dominic, non otterrai un errore se hai sbagliato l'ortografia della costante e il valore della costante errata sarà indefinito (il che può portare a debug del mal di testa).
Ma immagino che questo sia il migliore che possiamo ottenere.
Inoltre, ecco una sorta di miglioramento della funzione di Dominic, 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;
In questo modo è possibile utilizzare la funzione define () in altri moduli e consente di definire costanti sia all'interno del modulo constants.js che costanti all'interno del modulo da cui è stata chiamata la funzione. La dichiarazione delle costanti del modulo può quindi essere eseguita in due modi (in script.js).
Primo:
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
Secondo:
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
Inoltre, se vuoi che la funzione define () sia chiamata solo dal modulo constants (non per gonfiare l'oggetto globale), la definisci così in constants.js:
exports.define = function ( name, value, exportsObject )
e usalo così in script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports. Cosa c'è di strano in questo?