ฉันพบวิธีแก้ปัญหาโดมินิกแนะนำให้ดีที่สุด แต่ก็ยังขาดคุณสมบัติหนึ่งของการประกาศ "const" เมื่อคุณประกาศค่าคงที่ใน JS ด้วยคีย์เวิร์ด "const" การมีอยู่ของค่าคงที่จะถูกตรวจสอบ ณ เวลาที่แจงไม่ใช่เวลารันไทม์ ดังนั้นหากคุณสะกดชื่อค่าคงที่ไว้ที่ใดที่หนึ่งในรหัสของคุณคุณจะได้รับข้อผิดพลาดเมื่อคุณพยายามเริ่มโปรแกรม node.js ซึ่งเป็นการตรวจสอบการสะกดคำผิดที่ดีกว่าไกลกว่ามาก
หากคุณกำหนดค่าคงที่ด้วยฟังก์ชั่น define () เช่น Dominic ที่แนะนำคุณจะไม่ได้รับข้อผิดพลาดหากคุณสะกดค่าคงที่และค่าของค่าคงที่ที่สะกดผิดนั้นจะไม่ได้กำหนดไว้ (ซึ่งอาจนำไปสู่
แต่ฉันเดาว่านี่เป็นสิ่งที่ดีที่สุดที่เราจะได้รับ
นอกจากนี้ยังเป็นการปรับปรุงฟังก์ชันของ Dominic ใน 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;
ด้วยวิธีนี้คุณสามารถใช้ฟังก์ชัน define () ในโมดูลอื่นและช่วยให้คุณกำหนดค่าคงที่ทั้งภายในโมดูล constants.js และค่าคงที่ภายในโมดูลของคุณซึ่งคุณเรียกใช้ฟังก์ชันนี้ การประกาศค่าคงที่ของโมดูลนั้นสามารถทำได้สองวิธี (ใน script.js)
ครั้งแรก:
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
ประการที่สอง:
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
นอกจากนี้หากคุณต้องการให้ฟังก์ชัน define () ถูกเรียกใช้เฉพาะจากโมดูลค่าคงที่ (ไม่ขยายวัตถุโกลบอล) คุณต้องกำหนดเช่นนี้ใน constants.js:
exports.define = function ( name, value, exportsObject )
และใช้แบบนี้ใน script.js:
constants.define( 'SOME_CONSTANT', "const value 1" );
exportsหากคุณต้องการที่จะส่งออกมันคุณใส่ไว้ใน เกิดอะไรขึ้นกับสิ่งนั้น?