почему оба используются здесь
blockquote>Я считаю, что они просто хотят быть ясными, что
module.exports
,exports
иnano
указывают на ту же функцию - позволяя вы можете использовать любую переменную для вызова функции внутри файла.nano
предоставляет некоторый контекст того, что делает функция.
exports
не будет экспортироваться (толькоmodule.exports
будет), так зачем же переписывать это?Комплимент подробностей ограничивает риск будущих ошибок, например, используя
exports
вместоmodule.exports
в файле. Он также дает разъяснения, чтоmodule.exports
иexports
на самом деле указывают на одно и то же значение.
module.exports
vsexports
Пока вы надеваете 't переназначить
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:
helloWorld2.js:let sayHello = require('./helloWorld1'); sayHello.hello; // hello world
module.exports = () => console.log('hello world');
app2.js:
let sayHello = require('./helloWorld2'); sayHello; // hello world