почему оба здесь используются
Я думаю, они просто хотят прояснить, что module.exports
, exports
и nano
указывают на одну и ту же функцию - позволяя вамиспользуйте любую переменную для вызова функции в файле.nano
предоставляет некоторый контекст для того, что делает функция.
exports
не будет экспортироваться (будет только module.exports
), так зачем же перезаписывать это?
Компромисс между подробностями ограничивает риск будущих ошибок, таких как использование exports
вместо module.exports
в файле.Он также обеспечивает уточнение , что module.exports
и exports
фактически указывают на одно и то же значение.
module.exports
против exports
Asпока вы не переназначаете module.exports
или exports
(а вместо этого добавляете значения к объекту, к которому они оба относятся), у вас не возникнет никаких проблем и вы можете смело использовать exports
, чтобы быть более лаконичным.
При назначении не объекту они теперь указывают на разные места, которые могут сбивать с толку, если вы намеренно не хотите, чтобы module.exports
был чем-то конкретным (например, функцией).
Установка exports
для необъекта не имеет особого смысла, так как вам нужно будет установить module.exports = exports
в конце, чтобы иметь возможность использовать его в других файлах.
let module = { exports: {} };
let exports = module.exports;
exports.msg = 'hi';
console.log(module.exports === exports); // true
exports = 'yo';
console.log(module.exports === exports); // false
exports = module.exports;
console.log(module.exports === exports); // true
module.exports = 'hello';
console.log(module.exports === exports); // false
module.exports = exports;
console.log(module.exports === exports); // true
Зачем назначать module.exports
функции?
Более кратко!Сравните, насколько короче второй пример:
helloWorld1.js:
module.exports.hello = () => console.log('hello world');
app1.js: let sayHello = require('./helloWorld1'); sayHello.hello; // hello world
helloWorld2.js:
module.exports = () => console.log('hello world');
app2.js: let sayHello = require('./helloWorld2'); sayHello; // hello world