0

https://github.com/jaredhanson/passport-local/blob/master/lib/index.js中有如下构造:

 /**
    * Module dependencies.
   */

  var Strategy = require('./strategy');



/**
 * Expose `Strategy` directly from package.
 */
exports = module.exports = Strategy;

/**
 * Export constructors.
 */
exports.Strategy = Strategy;

看起来 Strategy 被导出了两次 - 直接和通过属性 Strategy - 即 require('passport-local') 和 require('passport-local').Strategy 都指向相同的类型。这种结构的目的是什么?

4

2 回答 2

0

它创建一个指向主对象的循环引用。它不会使用额外的内存或导致内存泄漏。它是同一个对象,只是对 top 的引用。它在 node.js 中非常常用(只是日志流对象)。这里显然图书馆没有使用它。

于 2014-09-10T15:27:44.590 回答
0

进一步观察,看起来这样做是为了在各种策略之间保持一致性。一个模块可以导出多个策略。因此,模块将为每个策略具有单独的属性。但是,在这种情况下,该模块包含一个单一的策略。因此,它似乎已作为模块和模块中的属性公开,这样 module.Strategy 将返回策略。

于 2014-09-17T12:53:45.980 回答