摘要:语法父类名表示当前类继承于哪个类的标签。成员标签成员标签作用于类中的配置属性函数事件。表明可被子类继承,和一起使用。示例获取圆的面积圆的半径面积值作用于函数,表明函数的标签。作用于函数,表明构造函数参数的标签,用法同。
字数:3692字
阅读时间:15分钟
前言 首先,咱们有一个前提,JSDuck对我们而言只是一个便于API查看的文档化工具。因此,只要它能够满足我们文档化的所有需求,并且优雅地显示出来就足够了。所以,这篇文章旨在告诉大家,在日常工作中,我们如何使用这个工具,至于里面的实现原理、编程思想或者自定义标签等咱一概不讲。
如果是之前完全没有接触过JSDuck或者机器上没有JSDuck环境,建议可以先花5分钟看一下笔者的另一篇文章 五分钟玩转文档化工具JSDuck。可以先将环境搭建起来,对JSDuck也有一个可视化的认识。
接下来,笔者将从基本概念、标签、工具使用三个方面,和你一起认识认识JSDuck文档化工具。
提别标明一下,文章所有讲述的内容都是基于当前最新的版本JSDuck5
1.基本概念 JSDuck将代码组成分为两大部分:类和类中成员。其中,成员又分为配置、属性、函数、事件、文档样式几个部分。因此,使用JSDuck有一个基础——我们的代码都是以面向对象的方式编写的。
其次,JSDuck的数据类型包括JS原始类型、JS内嵌类型和DOM类型三大类型。
JS原始类型:
boolean:布尔类型
number:数值类型
string:字符串类型
void:无返回值
undefine:未定义
JS内嵌类型:
Number:数值类型
String:数值类型
Boolean:布尔类型
Object:对象
Array:数组类型
Date:日期类型
Function:函数类型
Arguments:函数参数
Error:错误类型
Regex:正则对象
null:空值
DOM类型:
HTMLElement:html节点类型
XMLElement:xml节点类型
NodeList:DOM节点集合类型
TextNode:DOM文本节点类型
CSSStyleSheet:样式表对象
CSSStyleRule:样式规则对象
Event:DOM事件类型
这些数据类型都是JSDuck默认支持的数据类型,它们都是我们在写代码文档时可以直接使用的数据类型。此外,JSDuck还支持我们自定义数据类型,不过绝大多数情况下,这些数据类型已经足够我们使用了。
2.标签 JSDuck拥有超级丰富的标签,这也正是它功能强大的体现之一。其实学习这个工具的80%的学习成本都在标签的学习上,也就是说弄清楚了这些标签,那我们基本上就掌握了这门工具了。而且,其实在我们学习这些标签时,不仅是了解他们的用法,我们更多的是学习到这些标签背后的代码规范、设计思路和编程思想。废话不多说了,咱就开始JSDuck标签的学习吧!
JSDuck一共有55个标签,去除废弃的和基本不用的标签,还有39个。其中,通用标签9个,类标签9个,成员标签15个,其他标签6个。现在我们需要学习的仅仅就是这不到40个标签,而且,这40个里面有一半的标签使用频率很低。所以,实质上,我们掌握20个常用标签就能满足我们绝大部分的需求了。那么,下面我们就一起来看看这些标签的用法吧!
通用标签
通用标签作用于所有代码。
@author
示例: /** * @class MyClass * My neat class. * @author John Doe*/ 表示代码作者的标签。
@docauthor
示例: /** * @class MyClass * My neat class. * @author John Doe* @docauthor Tom */ 表示文档作者的标签,一般情况下和代码作者一致,如果不一致时,才会使用的标签。
@example
示例: /** * * @example * var pMyClass = new MyClass(); * * @class MyClass * My neat class. * @author John Doe*/ 文档示例,使用 @example 标签时注意要上下都至少空一行并且空四个。这里也可使用markdown语法代替使用。
样例还有一种用法,通过命令参数 --examples 配置示例文件目录,以页面的形式查看示例。
@link
示例: /** * 展示非阻挡式消息框,阻挡式弹出框见{@link GM.Alert#show GM.Alert} * @method show * @param strMessage */内部链接标签,可以链接到文档其他位置。
@static
表明类或成员为静态的标签。
@since、@experimental 、@depercated、@new
四个标签用法一样,分别表示:代码版本之后无效标签、实验性代码标签、暂用代码标签、新增代码标签。
类标签
类标签只作用于类。
@class
语法: @class 类名表示类的标签。
@extends
语法: @extends 父类名表示当前类继承于哪个类的标签。
@alias、@alternateClassName
分别表示类的别名标签、类的说明标签。
@abstract
表明抽象类的标签。
@requires
示例: /** * @class TestClass * @requires TestClass3 * @requires TestClass4 */表明当前类依赖的类,可以有多个依赖类。
@uses
表明当前类使用了那些类,可以有多个。
@mixins
表明多态类标签,当前类中混合了其他类的成员。
@singleton
表明当前类为单例模式类。
成员标签
成员标签作用于类中的配置、属性、函数、事件。
@member
语法: @member 类名表明当前成员属于哪一个类,如果代码中该成员已经属于某个类,则会自动分析出来,不需要添加该标记。
@private、@protected
分别表明当前成员是私有成员和受保护成员的标签。
@hide
文档中,子类不需要展示出来的其父类的成员标签。
@inheritable
表明可被子类继承,和@static一起使用。
@removed
表明成员已经被删除标签。
@method
示例: /** * @method area * 获取圆的面积 * @param {Number} r 圆的半径 * @return {Number} 面积值 */作用于函数,表明函数的标签。
@param
语法: @param name @param {Type} name @param {Type} [name] @param {Type} [name="default-value"] @param {Type} name.subproperty作用于函数,表明函数参数的标签。
@constructor
作用于函数,表明函数是类的构造函数的标签。
@cfg
作用于函数,表明构造函数参数的标签,用法同 @param。
@return
语法: @return {Type} 返回说明 @return {Type} return.subproperty作用于函数,表明函数返回值标签,没有返回值就不需要添加该标签。
@abstract
作用于函数,表明函数是抽象函数的标签。
@chainable
作用于函数,表明函数是链式函数的标签。如果代码中直接返回this,则工具会自动识别为链式函数。
@throws
语法 @throws 错误描述 @throws {Type} 错误描述作用于函数,表明函数报错时抛出的异常标签,可以添加多个标签表明多个异常,错误类型默认是 object 类型。
@fires
语法: @fires eventName作用于函数,表明当前函数会触发哪个事件的标签。
其他标签
3.工具使用其他标签作用于一些特殊代码。
@event
语法: @event name 事件描述作用于事件,描述事件的标签。
@preventable
作用于事件,表明事件触发函数中,返回false就可以停止冒泡的标签。
@enum
语法: @enum @enum {Type} @enum {Type} EnumName @enum [EnumName=alias.*] 示例: /** @enum */ MyEnum = { /** the first enum value */ FIRST: "foo", /** the second enum value */ SECOND: "bar" };表明枚举的标签。
@property
作用于类中属性,用法同 @param ,描述属性的标签。
@readonly
作用于类中属性,表明属性是只读的标签。
@aside
语法: @aside guide@aside video @aside example 作用于类,表明向导的标签。
上面讲述了一堆JSDuck的概念和各种标签,那都是在约束我们如何编写代码和相应的注释。那在这个基础上,我们该如何使用这个工具呢?
JSDuck工具使用起来其实非常简单,就是几个简单的cmd命令就可以了。如下图所示,就是JSDuck的所有命令,一页就可以显示完全,并且我们常用的命令不到10个。
部分命令参数如下:
参数 | 含义 |
---|---|
-- 或 空 | 需要生成文档的文件或者目录,也可以是一个集合 |
--output | 文档存放的目录 |
--config | 配置文件路径 |
--encoding | 文档编码方式 |
--exclude | 不生成文档的目录或文件,可以是一个集合 |
--title | 文档标题 |
--footer | 文档标尾 |
--head-html | 文档页面的head中需要添加的内容 |
--body-html | 文档页面的body中需要添加的内容 |
--css | 额外添加的样式 |
--welcome | 欢迎页面 |
--guides | 向导配置 |
--examples | 示例配置 |
--categories | 分类配置 |
--images | 图片路径配置 |
--tags | 自定义标签 |
--examples-base-url | 示例文件的基础路径 |
--help | 查看命令帮助 |
--version | 查看当前版本 |
这里要注意一点,JSDuck所有的参数都需要添加两个 “-”。例如,最常用的命令就是 :
jsduck "G: est-jsduck est.js" --output=G: est-jsduckdoc
这条命令的意思就是将文件 G:test-jsducktest.js 中的代码生成文档,然后存放到目录 G:test-jsduckdoc 下。这是最简单的一条命令,这个命令之后可以添加上面列出的任何参数。但是每次我们都去敲一堆命令行来执行工具确实有点繁琐,下面我们一起试试更便捷的方法吧!
JSDuck是支持使用配置文件来执行命令的,我们只需要在执行cmd的目录下创建一个名为 jsduck.json 的文件,将所有的配置都写到这个配置文件里面,然后直接执行 jsduck 命令就行了。下面我们贴出一个标准的配置文件看看:
{ "--title": "XXX文档", "--welcome": "welcome.html", "--warnings": ["-link", "-no_doc"], "--seo": true, "--": [ "./common/js", "./custom", "./libs/angular/custom" ], "--output": "./docs", "--examples-base-url": "./examples", "--examples": "./examples.json", "--body-html": [ "" ], "--tags":["tags/my_custom_tag.rb"] }
如果想省事情,可以直接把这段配置拷贝过去,按照自己的实际环境设置一下属性,就可以直接使用了。下面,我们一起来解读一下这段配置的含义。
"--title": "XXX文档",
配置文档在浏览器中显示的标签名称和页面的标题名称为 “XXX文档”。
"--welcome": "welcome.html",
配置文档欢迎页面的路径为“welcome.html”,这里配置的是相对当前运行命令的路径。
"--warnings": ["-link", "-no_doc"],
配置生成文档时,遇到未知的连接或缺失文档的代码时,不生成警告日志。参数值里面,“-”表示
关闭警告,“+”表示打开警告,查看详细警告信息可以键入jsduck --help=warings
"--seo": true,
配置生成文档时,进行SEO优化。
"--": [ "./common/js", "./custom", "./libs/angular/custom" ],
配置需要生成文档的内容,这里我配置了一个集合,里面包含了三个目录,这三个目录下所有的文件都会被扫描并生成文档。这里,我们也可以配置到具体的一个文件。
"--output": "./docs",
配置生成的文档文件的保存目录为当前目录下的 docs 文件夹。
"--examples-base-url": "./examples",
配置生成的文档中示例的基准目录为当前目录下的 examples文件夹,文档中需要使用的示例文件都以这个目录为基础路径。
"--examples": "./examples.json",
配置示例文件路径为当前目录下名为 examples.json 的文件,文件内容如下:
[ { "title": "Combination Examples", "items": [ { "name": "feed-viewer", "title": "Feed Viewer", "description": "RSS feed reader example application.", "url": "feed-viewer.html", "icon": "G:/codeWorkSpace/idea/static-resources/src/main/webapp/custom/frame/frame2/img/user.png", "status": "updated" }, { "name": "web-desktop", "text": "Web Desktop", "description": "A desktop in the browser using Ext components.", "url": "http://www.example.com/desktop.html", "icon": "/../../custom/frame/frame2/img/user.png", "status": "updated" } ] } ]其中,url如果是相对路径,就是相对 "--examples-base-url" 中配置的路径
"--body-html": [ "" ],
配置生成的文档页面中,body内需要添加的额外内容,页面元素表现如下图所示:
这里我是配置了一个版本列表的下拉菜单,里面包含了这个文档的1.0、2.0、3.0版本的链接。
"--tags":["tags/my_custom_tag.rb"]
配置自定义标签,我们这里是配置了一个ruby代码文件路径,自定义了一种标识成员为内部成员的标签。这里就需要我们具备一点ruby的知识了,该文件代码如下:
require "jsduck/tag/boolean_tag" class Inner < JsDuck::Tag::BooleanTag def initialize @pattern = "inner" @signature = {:long => "inner", :short => "in"} super end end这就是一个自定义一个布尔类型的简单标签的示例代码。还有许多更复杂的标签定义方式,但是好在JSDuck提供的标签已经相当丰富了,绝大多数情况下,我们是不需要自定义标签的。
至此,JSDuck的基本用法就已经全部介绍完毕啦!到这里的大家也已经拥有独立使用JSDuck所需的所有知识储备了,接下来我们缺的只有实战了。下一篇文章,笔者将和大伙一起实战一把,探讨一下怎样才是使用JSDuck的正确姿势。
马上回来,敬请期待哦!
除了该文章以外,笔者还特制了一份思维导图,以作饭后甜点食用: 一张图之——JSDuck 。
欢迎关注我的微信公众号:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/90723.html
摘要:我们在对现在较主流的五个文档工具分别作了调研和尝试,得到结论如下工具优点缺点提供了完整的模板开发事件触发等接口,使用非常灵活。至此,的环境部署已经全部完成了。 字数:981 阅读时间:5分钟 选型依据 在经历了数个上线的项目之后,笔者所在的团队已经沉淀了一个相对稳定版本的前端框架。因此,我们需要出具一套框架API文档,以便公司其他成员的使用和框架的后期维护。我们在对...
摘要:本文比较了种较为主流的注释文档生成工具。应该说是非常适合开源项目多个作者共同维护的一个文档工具。最后我选择了作为文档生成的工具。为了支持多种语言,它仅对注释块内部的内容进行解析。 最近随着写Node以及独立的CommonJS模块越来越多,我发现有一份好的文档不仅可以帮助自己在应用这些接口的时候不至于迷糊,而且对于共同开发的情况下,能够省去大量团队的交流和Debug的时间。 本文比较了...
摘要:融合思路解决这个问题,有两种思路。给我们带来了以下新成员模块服务指令筛选器和控制器。与其他类是通过类的名称区分的,名称统一以结尾。这种处理方式是一种折中方案,如果想要更加规范优雅的话,建议使用自定义标签来解决。 字数:1568 阅读时间:10分钟 前言 前面,我们以一个实战案例来详细说明了如何在实际开发中使用JSDuck工具。但是,并不是所有的时候,代码的封装方式都受我们控制的。...
阅读 746·2023-04-26 01:30
阅读 3300·2021-11-24 10:32
阅读 2178·2021-11-22 14:56
阅读 1978·2021-11-18 10:07
阅读 552·2019-08-29 17:14
阅读 623·2019-08-26 12:21
阅读 3102·2019-08-26 10:55
阅读 2939·2019-08-23 18:09