资讯专栏INFORMATION COLUMN

JSDuck用法详解

xiaochao / 1841人阅读

摘要:语法父类名表示当前类继承于哪个类的标签。成员标签成员标签作用于类中的配置属性函数事件。表明可被子类继承,和一起使用。示例获取圆的面积圆的半径面积值作用于函数,表明函数的标签。作用于函数,表明构造函数参数的标签,用法同。

字数: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

作用于函数,表明当前函数会触发哪个事件的标签。

其他标签

其他标签作用于一些特殊代码。

@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 

作用于类,表明向导的标签。

3.工具使用

​ 上面讲述了一堆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

相关文章

  • JSDuck实战

    摘要:我们先声明了类,在类的注释上添加标签表示静态类。静态类中包含一个方法,实现了一个简单的扩展功能,后面类的继承需要用到这个接口。这里需要注意,静态类中,所有的成员也都是静态的。 字数:2543 阅读时间:15分钟 前言 ​ 上一篇文章我们讲述了JSDuck的详细用法。那么,本文笔者就以实例为基础,和大家一起,从零开始,搭建一个简单的API文档——我们的第一个API文档V0.0.1。...

    kel 评论0 收藏0
  • 五分钟玩转文档化工具JSDuck

    摘要:我们在对现在较主流的五个文档工具分别作了调研和尝试,得到结论如下工具优点缺点提供了完整的模板开发事件触发等接口,使用非常灵活。至此,的环境部署已经全部完成了。 字数:981 阅读时间:5分钟 选型依据 ​ 在经历了数个上线的项目之后,笔者所在的团队已经沉淀了一个相对稳定版本的前端框架。因此,我们需要出具一套框架API文档,以便公司其他成员的使用和框架的后期维护。我们在对...

    rickchen 评论0 收藏0
  • Javascript自动化文档工具:YUI Doc, JSDoc 3, JSDuck等比较

    摘要:本文比较了种较为主流的注释文档生成工具。应该说是非常适合开源项目多个作者共同维护的一个文档工具。最后我选择了作为文档生成的工具。为了支持多种语言,它仅对注释块内部的内容进行解析。 最近随着写Node以及独立的CommonJS模块越来越多,我发现有一份好的文档不仅可以帮助自己在应用这些接口的时候不至于迷糊,而且对于共同开发的情况下,能够省去大量团队的交流和Debug的时间。 本文比较了...

    tyheist 评论0 收藏0
  • Jsduck的使用

    摘要:简介是众多开源项目中的一个,它是使用编写的文档生成器。系统环境变量,对所有用户起作用。使用可通过配置,也可通过直接在命令行写参数来使用。配置进入项目目录,配置文件,类似以下的写法运行命令,即可在文件夹下找到自动生成的文档。 简介 jsduck是senchalabs众多开源项目中的一个,它是使用ruby编写的 javascript API文档生成器。不像JSDoc一样,不按照符合JSDo...

    alaege 评论0 收藏0
  • JSDuck 与 AngularJS 融合技巧

    摘要:融合思路解决这个问题,有两种思路。给我们带来了以下新成员模块服务指令筛选器和控制器。与其他类是通过类的名称区分的,名称统一以结尾。这种处理方式是一种折中方案,如果想要更加规范优雅的话,建议使用自定义标签来解决。 字数:1568 阅读时间:10分钟 前言   前面,我们以一个实战案例来详细说明了如何在实际开发中使用JSDuck工具。但是,并不是所有的时候,代码的封装方式都受我们控制的。...

    CarterLi 评论0 收藏0

发表评论

0条评论

xiaochao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<