JSDoc

随着ES2015的定稿,模块化已经成为前端开发的规范被执行,清晰的模块化使得开发者与开发者之间的依赖便的更小,当项目还小时,可以通过查找一下模块源文件中的声明就能大致了解模块的功用。然而,随着项目的不断增长以及各项目之间的整合,开发者对其他模块的内容知之甚少,如果来源于不同项目,只是项目间的依赖的话,那么源代码有可能也无法在当前开发环境下找到,此时,开发者都会想到有个API文档那该多好啊。

所以,前端代码文档化势在必行

前端代码主要以js为主,主流的文档生成器便是JSDoc,最近项目是使用的ES2105编写的,JSDoc3.4.0之后已经提供了对ES2015的支持。

安装JSDoc

npm i jsdoc -g

如何使用JSDoc

同其他语言一样,文档生成工具的原理还是通过代码注释去解析并根据一定的tag来生成文档。在JSDoc文档中明确说明了,只有以/**为开始的注释才会被JSDoc识别,其他的注释格式都会被忽略。

额外,JSDoc 默认还会将项目中的README.md文件一同生成到JSDoc最后生成的文档文件中,或通过命令--R/-readme 指定个别文件,将其添加至所生成的文档文件中,但文件格式必须是Markdown,此时,项目中的README.md将被忽略。

JSDoc命令行参数

JSDoc命令行几个常用参数有以下几个:

  • -c, --configure 指定configuration file
  • -d, --destination 指定输出路径,默认./out
  • -e, --encoding 设定encoding,默认utf8
  • -p, --private 将private注释输出到文档,默认不输出
  • -P, --package 指定package.json file
  • -r, --recurse 查询子目录
  • -t, --template 指定输出文档template
  • -u, --tutorials 指定教程路径,默认无

JSDoc配置文件

同许多js工具一样,JSDoc也有配置文件,可以通过设定配置文件来定制JSDoc。如果没有指定configuration file,将会使用一下配置。

{
    "tags": {
        "allowUnknownTags": true, // 允许使用自定义tag
        "dictionaries": ["jsdoc","closure"] // 定义tag集
    },
    "source": {
        "includePattern": ".+\\.js(doc)?$", // 将以.js, .jsdoc结尾的文件作为源文件
        "excludePattern": "(^|\\/|\\\\)_" // 忽略以_开头的文件夹及文件
    },
    "plugins": [],
    "templates": {
        "cleverLinks": false,
        "monospaceLinks": false
    }
}

以上这个是默认配置,下面解释几个常用配置。

  • source:顾名思义是用来指定源文件的,在其之下包含了4个属性,其中两个已经在默认配置中出现过了。
    |- include: [ array of paths to files to generate documentation for ], // 源文件路径数组
    |- exclude: [ array of paths to exclude ], // 排除文件路径数组
    |- includePattern: a regular expression, // 接受一个正则表达式,当文件名匹配这个正则时,执行JSDoc
    |- excludePattern: a regular expression, // 接受一个正则表达式,当文件名匹配这个正则时,JSDoc忽略该文件
    JSDoc以以下的顺序执行这些属性:
    1. 根据include获取目标文件
    2. 根据includePattern筛选由第一步得到的目标文件
    3. 根据excludePattern筛选由第二步得到的文件
    4. 最后根据exclude属性,排除由第三步得到的文件结果集,排除之后的文件便是JSDoc需要执行的源文件。
  • tags: 用来指定tag库,tags下面有2个属性,分别是
    |- allowUnknownTags: 用来告诉JSDoc如何处理标签库以外的tag,设为false时,JSDoc不会处理标签库以外的tag,但会记录一个警告,默认为true
    |- dictionaries: 数组格式,指定标签库,标签库越靠前,优先度越高
  • opts: 命定行参数可以在此属性下配置,列如:
  "opts": {
    "template": "templates/default",  // same as -t templates/default
    "encoding": "utf8",               // same as -e utf8
    "destination": "./out/",          // same as -d ./out/
    "recurse": true,                  // same as -r
    "tutorials": "path/to/tutorials", // same as -u path/to/tutorials
}
  • plugins: 配置额外的插件,如markdown插件,与此同时,JSDoc也可以编写自定义插件做额外的处理。
  • templates: 可以用来配置默认template的格式,或另外指定自定义的template

Tags

上文说了那么多,主要说的都是JSDoc如何使用和配置,和平时的编码过程中注释怎么写,要使用哪些标签并没什么联系,现在就来讲讲最重要的Tag

JSDoc中将tag分为两类,Block tagInline tag

  • Block tag: 在JSDoc中是最高级别的注释,通常用来提供代码的详细信息。它以@开头,除了位于注释最后的Block tag,其他Block tag必须紧跟换行符
  • Inline tag: 通常是Block tag的文字内容或描述,它用一对{}包裹。

Block tag也就是我们平时最常用的注释标签,在此列举一些常用的tag

Inline tag

  • {@link} 生成一个链接指向定义的namepath或者URL

Namepaths

namepath在JSDoc中起着至关重要的作用,JSDoc namepath会提供一个唯一的标识给任意一个变量,这使得你在使用inline tag时,可以方便的找到任何一个变量,从而提供一个指向该变量的链接。

MyConstructor                // 父元素
MyConstructor#instanceMember // 成员变量使用#
MyConstructor.staticMember   // 静态变量使用.
MyConstructor~innerMember    // 内部成员使用~
                             // module使用:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 最近要为公司项目做javaScript API,在网上找了几个生成工具,JSDoc和YUIDoc好像很不错。我选用...
    ANoman_M阅读 8,208评论 0 3
  • 前言 webpack2和vue2已经不是新鲜东西了,满大街的文章在讲解webpack和vue,但是很多内容写的不是...
    技术宅小青年阅读 6,499评论 4 43
  • 简单说,用JSDoc写开发文档就是写注释,只是在书写的时候要把它们按照规范工整的写出来,这样即可达到注释的目的又能...
    错码匠阅读 1,675评论 1 1
  • 在初秋 约起一场冬天的火锅 等柜子里新添的那件黑色风衣可以上身的时候 等初雪开始飘落的时候 等烟火滋味愈加温暖的...
    AbitParanoia阅读 126评论 0 1