Tôi tìm thấy giải pháp mà Dominic đề xuất là giải pháp tốt nhất, nhưng nó vẫn bỏ lỡ một tính năng của khai báo "const". Khi bạn khai báo một hằng số trong JS với từ khóa "const", sự tồn tại của hằng số được kiểm tra tại thời điểm phân tích, không phải trong thời gian chạy. Vì vậy, nếu bạn viết sai tên của hằng số ở đâu đó trong mã của bạn, bạn sẽ gặp lỗi khi bạn cố gắng khởi động chương trình node.js của mình. Đó là một kiểm tra sai chính tả tốt hơn nhiều.
Nếu bạn xác định hằng số với hàm định nghĩa () như Dominic đã đề xuất, bạn sẽ không gặp lỗi nếu bạn viết sai chính tả và giá trị của hằng số sai chính tả sẽ không được xác định (có thể dẫn đến việc gỡ lỗi đau đầu).
Nhưng tôi đoán đây là điều tốt nhất chúng ta có thể nhận được.
Ngoài ra, đây là một loại cải tiến chức năng của Dominic, trong 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;
Theo cách này, bạn có thể sử dụng hàm định nghĩa () trong các mô-đun khác và nó cho phép bạn xác định các hằng cả bên trong mô-đun constants.js và các hằng số bên trong mô-đun mà bạn gọi là hàm. Khai báo các hằng mô-đun sau đó có thể được thực hiện theo hai cách (trong script.js).
Đầu tiên:
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
Thứ hai:
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
Ngoài ra, nếu bạn muốn hàm chỉ định () chỉ được gọi từ mô đun hằng (không làm phình to đối tượng toàn cầu), bạn định nghĩa nó như thế này trong constants.js:
exports.define = function ( name, value, exportsObject )
và sử dụng nó như thế này trong script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exports. Có gì khó xử về điều đó?