Encontré la solución que Dominic sugirió para ser la mejor, pero todavía falta una característica de la declaración "const". Cuando declara una constante en JS con la palabra clave "const", la existencia de la constante se verifica en tiempo de análisis, no en tiempo de ejecución. Entonces, si escribe mal el nombre de la constante en algún lugar más adelante en su código, obtendrá un error cuando intente iniciar su programa node.js. Lo cual es una verificación de ortografía mucho mejor.
Si define la constante con la función define () como sugirió Dominic, no obtendrá un error si escribe mal la constante, y el valor de la constante mal escrita no estará definido (lo que puede provocar dolores de cabeza de depuración).
Pero supongo que esto es lo mejor que podemos obtener.
Además, aquí hay una especie de mejora de la función de Dominic, en 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;
De esta manera, puede usar la función define () en otros módulos, y le permite definir constantes tanto dentro del módulo constants.js como constantes dentro de su módulo desde el que llamó a la función. La declaración de las constantes del módulo se puede hacer de dos maneras (en script.js).
Primero:
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
Segundo:
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
Además, si desea que la función define () se invoque solo desde el módulo de constantes (no para hinchar el objeto global), debe definirla así en constants.js:
exports.define = function ( name, value, exportsObject )
y úsalo así en script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports. ¿Qué tiene de incómodo eso?