jsdoc 小记

Table of Contents

jsdoc 是一个可以根据注释自动生成文档的前端包。这在写公共库的时候很有用。相关文档也比较全面,问题是有时按照文档的操作,我没能得到预期的结果。

ps: 不要用 jsdoc-babel 插件。转译后的代码注释与预期不一样。

类注释

根据文档的说法,jsdoc 3.4 之后的 class 不需要手动添加 @class 之类的注视了,但是,我没能得到预期结果(jsdoc@3.6.7)。为了能让 class 和下面的方法都标注出来,尝试了个把小时。所以这里记录一下,贴个样例。

/**
 * @class NIM
 * @extends IMBase
 * @param {object} config 配置
 * @param {string} config.appKey 网易云信帐号<meta charset="utf-8">
 * @param {string} [config.debug=true] 网易云信帐号
 * @param {boolean} [immediateLogin] 是否需要立即登录,默认 true
 * @description 网易云信 im
 * @example 
 * ```
 * const config = {
 *   appKey: ''
 * }
 * new NIM(config)
 *
 * ```
 */
class NIM extends IMBase {
  constructor(config, immediateLogin = true) {
    super(config)
    /**
     * @memberof NIM
     * @type {object}
     */
    this.instance = null
  }

  /**
   * @memberof NIM
   * @method login
   * 登录
   */
  login() {
  }
}

对于需要嵌套的参数,需要在本参数下方使用 xx.yy 的方式注释。比如上面的 config 子属性。

更换模板

jsdoc 默认的模板不太美观。所以有时需要更换模板。这里以 docstrap 为例。

安装:

npm install ink-docstrap

然后修改文档生成脚本:

"scripts": {
  "build": "babel src --out-dir lib",
  "docs": "jsdoc -c jsdoc.json -t ./node_modules/ink-docstrap/template"
}

在 jsdoc.json 里可以配置一下文档标题(templates 部分):

{
  "plugins": ["node_modules/jsdoc-babel"],
  "source": {
    "include": ["src"],
    "exclude": [],
    "includePattern": ".+\\.js(doc)?$",
    "excludePattern": "(^|\\/|\\\\)_"
  },
  "opts": {
    "encoding": "utf8",
    "destination": "./docs/",
    "recurse": true
  },
  "templates": {
    "systemName": "药联聊天前端文档",
    "cleverLinks": false,
    "monospaceLinks": false
  }
}

前端的每一步都是磕磕碰碰。我顺利过吗?