Попробую ответить на этот вопрос, как яваскрипта вопрос Пример кода
function a() {}
a.prototype.foo = {test:"bar"}
var d = new a();
var c = new a();
console.log(d.prototype ==== c.prototype) // Both c and d share the same prototype object
d.foo.hai = "hello"
console.log(d.prototype ==== c.prototype) // Still the they refer to the same
d.foo = {im: "sorry"}
console.log(d.prototype ==== c.prototype) // now they don't
То же самое для узла
console.log(module.exports === exports);// true; They refer to the same object
exports.a = {tamil: "selvan"}
console.log(module.exports === exports);// true even now
exports = {sorry: "im leaving"}; // overrides modules.exports
console.log(module.exports === exports); //false now they don't
console.log(module.exports); // {a: {tamil: "selvan"}}
console.log(exports); // {sorry: "im leaving"}
экспорта и module.exports не относятся к одному объекту ядра, пока вы переопределения как в объекте прототипа javsacript. В тот момент, когда вы переопределяете эталонные изменения.
module.exports = {something: "works"}
Работает, потому что вы меняете свойство модуля, которому узел заботится при его кешировании.
Даже для вышеприведенного
module.exports === exports //is false they are no more the same
это доказывает, что наоборот тоже верно :)
более вещь module
является ссылкой на текущий модуль, поэтому всегда предпочитают использовать module.exports
чем exports
One