jsdoc没有正确记录nodejs模块

时间:2015-06-09 21:54:48

标签: node.js jsdoc

我正在尝试让JSDOC(3)正确记录我的NodeJS模块。虽然简单的模块工作,但我找不到记录稍微复杂的模块的方法。

我的NodeJS模块具有以下结构:

/** @module MyModule */
(function() {


     function functionToExportOne {...}

     function functionToExportTwo {...}

     /** 
      * @module MyModule.ClassToExportOne
      * @constructor 
      */
     function ClassToExportOne {

           this.classMethodOne=function() { ... }
           this.classMethodTwo=function() { ... }

     }

     /** @constructor */
     function ClassToExportTwo {

           function classMethodOne() { ... }
           function classMethodTwo() { ... }

           return /** @lends {ClassToExportTwo.prototype} */ {

               methodOne:classMethodOne,
               methodTwo:classMethodTwo
           }
     }
     /** @exports MyModule */  <--- late addition, see comments
     module.exports={
         functionOne:functionToExportOne,
         functionTwo:functionToExportTwo,
         classOne:ClassToExportOne,
         classTwo:ClassToExportTwo
     }
})()

嗯,如您所见,模块导出方法和类构造函数。没什么好奇怪的。

问题是,JSDOC

  • 始终无法识别内部类
  • 第一个内部类方法误认为(外部)模块的方法,
  • 始终跳过实际导出的模块方法。
  • 我最接近的是ClassToExportOne,当我使用@module MyModule.<className>后跟@constructor时(按此顺序):在这种情况下,类被识别< / strong>,但仅记录构造函数,并且其方法记录为属于父模块

我尝试过数千种不同的组合但没有成功:

  • 使用this.method=function() {...}定义内部类方法(如ClassToExportOne中所述)或使用@lends {ClassToExportTwo.prototype}使用方法返回对象(如ClassToExportTwo中所述)
  • 在每个班级的标题中使用@module MyModule.ClassToExportOne
  • 定义module.exports vs exports.xxxx
  • 声明内部类@private,声明所有内容@private但导出
  • @module声明移到第一次出口之前(总是一团糟,有些东西被提升为“全局”,即使它在主要封闭内部!)
  • 如果我在导出声明之前添加@exports <modulename>,则会记录这些方法(与类方法混合)

我已尝试http://usejsdoc.org/howto-commonjs-modules.html中建议的所有内容,但没有成功。

我确定我错过了什么,却找不到什么。

2 个答案:

答案 0 :(得分:4)

以下适用于jsdoc 3.3.3:

{{1}}

以及创建模型实例的示例:

{{1}}

答案 1 :(得分:1)

我讨厌回答我自己的问题,但经过一些试验和错误,我得到了相当满意的结果。如果这是一种正确的方法,请随意发表评论,但事实是文档现已正确生成:)

关键似乎是在@constructor之前使用this.method=function() {...},这样类就会出现在“类”下的索引中,并且正确记录其方法如果声明了方法 /** @module MyModule */ (function() { function functionToExportOne {...} function functionToExportTwo {...} /** works !! * @exports MyModule.ClassToExportOne * @constructor */ function ClassToExportOne { function innerMethod() { ... } // this works: assigning methods to this this.classMethodOne=function() { ... } this.classMethodTwo=function() { ... } } /** does not work * @exports MyModule.ClassToExportTwo * @constructor */ function ClassToExportTwo { function classMethodOne() { ... } function classMethodTwo() { ... } // this DOES NOT WORK !! Methods get mixed with parent module return { methodOne:classMethodOne, methodTwo:classMethodTwo } } // no more @exports here as it duplicates definitions in the docs module.exports={ /** blah blah function description */ functionOne:functionToExportOne, /** blah blah function description */ functionTwo:functionToExportTwo, /** blah blah function description */ classOne:ClassToExportOne, /** blah blah function description */ classTwo:ClassToExportTwo } })()

我仍然希望找到一种方法来完成这项工作,如果可能的话,对于ClassToExportTwo中描述的情况,有时候我很方便定义这样的类,特别是对于调用私有方法的长类来说我可以避免在课堂上完全使用“this”(优化)。

这是适用于我的模板:

android-support-v7-appcompat] /android-support-v7-appcompat/gen already exists but is not a source folder. Convert to a source folder or rename it.