节点模块导出

时间:2014-09-10 12:54:52

标签: node.js module node-modules passport-local

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;

看起来战略出口两次 - 直接和通过财产战略 - 即要求('护照 - 本地')和要求('护照 - 本地')。策略都指向到同一类型。这种结构的目的是什么?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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