【发布时间】:2015-06-09 21:54:47
【问题描述】:
我正在尝试让 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(按此顺序):在这种情况下,类被识别,但是仅记录构造函数,其方法记录为属于父模块
我已经尝试了数千种不同的组合,但都没有成功:
- 使用
this.method=function() {...}定义内部类方法(如ClassToExportOne中所述)或使用@lends {ClassToExportTwo.prototype}方法返回一个对象(如ClassToExportTwo中所述) - 在每个类的标题中使用
@module MyModule.ClassToExportOne - 定义 module.exports 与 export.xxxx
- 声明内部类
@private,声明所有内容@private,但导出除外 - 将
@module声明移动到第一次导出之前(然后一团糟,有些东西被提升为“全局”,即使它在主闭包内!!) - 如果我在导出声明之前添加
@exports <modulename>,则方法会记录在案(与类方法混合)
我已经尝试了http://usejsdoc.org/howto-commonjs-modules.html 中建议的所有方法,但均未成功。
我确定我错过了什么,但找不到什么。
【问题讨论】: