ฉันผ่านการทดสอบบางอย่างและฉันคิดว่านี่อาจทำให้เกิดแสงสว่างในเรื่อง ...
app.js
:
var ...
, routes = require('./routes')
...;
...
console.log('@routes', routes);
...
รุ่นของ/routes/index.js
:
exports = function fn(){}; // outputs "@routes {}"
exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"
module.exports = function fn(){}; // outputs "@routes function fn(){}"
module.exports.fn = function fn(){}; // outputs "@routes { fn: [Function: fn] }"
ฉันยังเพิ่มไฟล์ใหม่:
./routes/index.js
:
module.exports = require('./not-index.js');
module.exports = require('./user.js');
./routes/not-index.js
:
exports = function fn(){};
./routes/user.js
:
exports = function user(){};
เราได้ผลลัพธ์ "@routes {}"
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.user = require('./user.js');
./routes/not-index.js
:
exports = function fn(){};
./routes/user.js
:
exports = function user(){};
เราได้ผลลัพธ์ "@routes {fn: {}, ผู้ใช้: {}}"
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.user = require('./user.js');
./routes/not-index.js
:
exports.fn = function fn(){};
./routes/user.js
:
exports.user = function user(){};
เราได้รับผลลัพธ์ "@routes {ผู้ใช้: [ฟังก์ชั่น: ผู้ใช้]}" ถ้าเราเปลี่ยนuser.js
ไป{ ThisLoadedLast: [Function: ThisLoadedLast] }
เราจะได้รับผลลัพธ์ "@routes {ThisLoadedLast: [ฟังก์ชั่น: ThisLoadedLast]}"
แต่ถ้าเราปรับเปลี่ยน./routes/index.js
...
./routes/index.js
:
module.exports.fn = require('./not-index.js');
module.exports.ThisLoadedLast = require('./user.js');
./routes/not-index.js
:
exports.fn = function fn(){};
./routes/user.js
:
exports.ThisLoadedLast = function ThisLoadedLast(){};
... เราได้รับ "@routes {fn: {fn: [Function: fn]}, ThisLoadedLast: {ThisLoadedLast: [ฟังก์ชัน: ThisLoadedLast]}}"
ดังนั้นฉันขอแนะนำให้ใช้เสมอmodule.exports
ในคำนิยามโมดูลของคุณ
ฉันไม่เข้าใจว่าเกิดอะไรขึ้นกับ Node ภายใน แต่โปรดแสดงความคิดเห็นหากคุณสามารถเข้าใจสิ่งนี้มากขึ้นเพราะฉันแน่ใจว่ามันช่วยได้
- การเข้ารหัสที่มีความสุข