Znalazłem rozwiązanie, które Dominic zaproponował jako najlepsze, ale wciąż brakuje mu jednej cechy deklaracji „const”. Gdy deklarujesz stałą w JS za pomocą słowa kluczowego „const”, istnienie stałej jest sprawdzane w czasie analizy, a nie w czasie wykonywania. Więc jeśli źle wpisałeś nazwę stałej gdzieś w kodzie później, pojawi się błąd podczas próby uruchomienia programu node.js. Co jest znacznie lepszym sprawdzaniem pisowni.
Jeśli zdefiniujesz stałą za pomocą funkcji defin (), jak sugerował Dominic, nie dostaniesz błędu, jeśli źle przeliterujesz stałą, a wartość błędnie stałej będzie niezdefiniowana (co może prowadzić do debugowania bólów głowy).
Ale myślę, że to najlepsze, co możemy dostać.
Dodatkowo, oto rodzaj ulepszenia funkcji Dominica w 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;
W ten sposób możesz użyć funkcji defin () w innych modułach i pozwala ona zdefiniować stałe zarówno wewnątrz modułu constants.js, jak i stałe w module, z którego wywołałeś funkcję. Deklarowanie stałych modułu można następnie wykonać na dwa sposoby (w script.js).
Pierwszy:
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
Druga:
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
Ponadto, jeśli chcesz, aby funkcja definiować () była wywoływana tylko z modułu stałych (nie nadmuchując obiektu globalnego), zdefiniuj ją w następujący sposób w constants.js:
exports.define = function ( name, value, exportsObject )
i użyj go w następujący sposób w script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports. Co jest w tym niewygodnego?