Eu achei a solução que Dominic sugeriu ser a melhor, mas ainda falta um recurso da declaração "const". Quando você declara uma constante em JS com a palavra-chave "const", a existência da constante é verificada no tempo de análise, não no tempo de execução. Portanto, se você digitou incorretamente o nome da constante em algum lugar posteriormente no seu código, receberá um erro ao tentar iniciar o programa node.js. Qual é uma verificação ortográfica muito mais melhor.
Se você definir a constante com a função define () como sugerido por Dominic, você não receberá um erro se tiver digitado incorretamente a constante, e o valor da constante incorreta será indefinido (o que pode levar a dores de cabeça na depuração).
Mas acho que é o melhor que podemos conseguir.
Além disso, aqui está um tipo de melhoria da função de Dominic, em 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;
Dessa forma, você pode usar a função define () em outros módulos, e permite definir constantes dentro do módulo constants.js e constantes dentro do módulo a partir do qual você chamou a função. A declaração de constantes do módulo pode ser feita de duas maneiras (em script.js).
Primeiro:
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
Além disso, se você deseja que a função define () seja chamada apenas a partir do módulo constantes (para não inchar o objeto global), defina-a assim em constants.js:
exports.define = function ( name, value, exportsObject )
e use-o assim em script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports. O que é estranho nisso?