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