Если вы посмотрите на источники passport-local
index.js
, вы увидите, что он экспортирует то же самое напрямую и в exports.Strategy
.
Когда вы делаете require('passport-local).Strategy
, вы импортируете экспорт, определенный в exports.Strategy
, но в этом случае это действительно то же самое, что и require('passport-local')
, потому что тот же конструктор экспортируется непосредственно из модуля.
Если вы определяете модуль следующим образом:
var Thing = { foo: () => 'bar' };
exports = module.exports = Thing;
exports.Thing = Thing;
Вы можете использовать его разными способами:
const Thing = require('./module');
console.log(Thing.foo());
работает, как и
const Thing = require('./module').Thing;
console.log(Thing.foo());
и с обоими импортами вы также можете позвонить
console.log(Thing.Thing.foo());
Если вы удалите exports.Thing = Thing;
часть модуля, то
const Thing = require('./module').Thing;
больше не работает.
Экспорт часто вызывает путаницу. Вы можете посмотреть Node docs или например. этот ответ .