我正在尝试让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
@private
,声明所有内容@private
但导出@module
声明移到第一次出口之前(总是一团糟,有些东西被提升为“全局”,即使它在主要封闭内部!)@exports <modulename>
,则会记录这些方法(与类方法混合)我已尝试http://usejsdoc.org/howto-commonjs-modules.html中建议的所有内容,但没有成功。
我确定我错过了什么,却找不到什么。
答案 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.