Javascript : Sự khác biệt giữa module.exports và exports
Không hề có ma thuật gì ở đây. Module code của bạn được kẹp giữa 2 items trong array này và nó tương đương.
NativeModule.wrapper = [
'(function (exports, require, module, __filename, __dirname) { ',
'\n});'
];
Các biến magic bạn có thể sử dụng trong các module:
exports, require, module, __filename, và __dirname là không magic, chúng chỉ là các tham số tới function mà được gọi khi module được load.
Lúc ban đầu,
exports và module.exports trỏ tới cùng một empty object.
Bạn có thể thêm các thuộc tính vào object này sử dụng
module.exports hoặc là dùng exports do chúng cùng trỏ tới cùng một object, tức là không quan trọng bạn dùng cái nào.
Nếu bạn thêm
exports.foo = "bar" và module.exports.baz = "boz" thì object được export của module sẽ như sau:{foo: "bar", baz: "boz"}
nhưng, nếu bạn muốn export
function, hoặc string, hoặc unicorn thì sao ?
Thì đây chính là sự khác biệt quan trọng giữa
exports và module.exports.
Nếu bạn có trí nhớ kém thì chỉ cần dùng
module.exports cho nhanh. Đỡ nghĩ nhiều.
Có nghĩa là bất cứ thứ gì được gán cho
module.exports là object thì nó sẽ được exports ra khỏi module.
Nếu bạn muốn export function từ module của bạn và bạn gán nó vào
exports mà không phải module.exports thì điều này sẽ xảy ra:
Bất ngờ chưa, module của bạn sẽ export empty object, không phải function mà bạn có lẽ định export.
Nếu bạn muốn export cái gì đó thay vì empty object và bạn muốn sử dụng
exports ở một nơi nào khác trong module, bạn sẽ phải cần gán lại đồng thời cả hai.exports = module.exports = function () {/* ... */}
exports.foo = "bar"
Không có nhận xét nào:
Đăng nhận xét