一路繁花似锦绣前程
失败的越多,成功才越有价值

导航

 

1、安装

# 全局安装
npm i -g jsdoc
# 本地安装
npm i -D jsdoc

2、基本使用

/**
 * 这是一个变量的声明
 * @type {number}
 */
var sampleVariable = 123

/**
 * 这是一个函数示例
 * @param {string} arg1 - 第一个参数,字符串类型
 * @param {number} arg2 - 第二个参数,数字类型
 * @return {boolean} 函数返回值,布尔类型
 */
function sampleFunction(arg1, arg2) {
  return true
}

/**
 * 这是一个自定义类型的声明
 * @typedef {Object} Person
 * @property {string} name - 用户姓名
 * @property {number} age - 用户年龄
 * @property {boolean} isStudent - 用户是否学生
 * @property {string[]} courses - 用户注册的课程
 */

/**
 * @param {Person} person - greet函数传递的参数
 */
function greet(person) {
  console.log(`Hello, ${person.name}!`);
}

/**
 * 这是一个类的声明
 * @class
 * @classdesc 这是类的描述信息
 */
class SampleClass {
  constructor() {
  }
}

/**
 * 这是一个构造函数的声明
 * @constructor
 * @param {string} arg1 - 第一个参数,字符串类型
 * @param {number} arg2 - 第二个参数,数字类型
 */
function SampleConstructor(arg1, arg2) {
}

3、生成文档

# 单文件
jsdoc ./index.js
# 指定目录
jsdoc ./src
# jsdoc --help
#     -d或--destination:文档生成的目录
#     -c或--configure:指定配置文件路径
#     -t或--template:使用的模板
#     -u或--tutorials:指定教程文件路径
#     -p或--package:指定package.json文件路径
#     -R或--readme:指定README文件路径
#     -r或--recurse:是否递归处理子目录

4、自定义配置生成文档

  • 步骤
# 生成package.json
npm init -y
# 安装jsdoc
npm i -D jsdoc
# 项目根目录新建jsdoc.config.json(jsdoc官方文档:https://jsdoc.app/)
# package.json添加
  • jsdoc.config.json
{
  "source": {
    "include": [
      "./src/"
    ],
    "includePattern": ".+\\.js(doc)?$",
    "exclude": [
      "./docs"
    ],
    "excludePattern": "(node_modules|test|dist|coverage|^|\\/|\\\\)_"
  },
  "opts": {
    "encoding": "utf8",
    "destination": "./docs/",
    "recurse": true
  },
  "plugins": [
    "plugins/markdown"
  ],
  "templates": {
    "cleverLinks": false,
    "monospaceLinks": false
  },
  "metadata": {
    "title": "我的Javascript项目"
  },
  "tags": {
    "allowUnknownTags": true,
    "dictionaries": [
      "jsdoc",
      "closure"
    ]
  }
}
  • package.json
{
  "scripts": {
    "docs": "jsdoc -c jsdoc.config.json"
  }
}

5、主题模板应用

  • 步骤
# 列举几款优秀的模板,可一同安装并逐一测试
npm i -D taffydb
npm i -D better-docs
npm i -D clean-jsdoc-theme
npm i -D daybrush-jsdoc-template
npm i -D docdash
# jsdoc.config.json添加和修改
# 修改模板的特定自定义属性
  • jsdoc.config.json
{
  "opts": {
    "template": "node_modules/clean-jsdoc-theme",
    "theme_opts": {
      "default_theme": "light",
      "homepageTitle": "Clean JSDoc theme",
      "title": "JSDoc文档自动生成",
      "footer": "copyright by Vane.",
      "menu": [
        {
          "title": "尚硅谷",
          "link": "http://www.atguigu.cn",
          "target": "_blank"
        }
      ]
    }
  }
}

6、自定义主题模板

  • 步骤
# 复制默认模板文件(node_modules/jsdoc/templates/default)至项目根目录下
# jsdoc.config.json修改(删除opts.theme_opts属性,修改opts.template属性)
  • jsdoc.config.json
{
  "opts": {
    "template": "./default"
  }
}

7、markdown插件的应用

  • 步骤
# 编辑测试用js注释
# jsdoc.config.json添加
  • src/function.js
/**
 * 这是一个函数示例
 *
 * # Markdown的1号标题
 * - Markdown的无序列表
 * - Markdown的无序列表
 * - Markdown的无序列表
 * - [Markdown的链接](http://www.atguigu.cn)
 * - Markdown的图片 ![Markdown的图片](http://www.atguigu.com/images/index_new/logo.png)
 *
 * @param {string} arg1 - 第一个参数,字符串类型
 * @param {number} arg2 - 第二个参数,数字类型
 * @return {boolean} 函数返回值,布尔类型
 */
function sampleFunction(arg1, arg2) {
  return true
}
  • jsdoc.config.json
{
  "plugins": [
    "plugins/markdown"
  ]
}

8、eslint检查注释语法

  • 步骤
# 安装eslint
npm i -D eslint
# 项目根目录新建.eslintrc.js(webstorm需设置Automatic ESLint configuration。此时js有语法检查,但是js注释没有)
# 安装eslint-plugin-jsdoc
npm i -D eslint-plugin-jsdoc
# .eslintrc.js添加(添加extends、plugins属性,修改rules属性)(报ESLint: SyntaxError: xxx可提高nodejs版本)
# eslint自动修复命令
eslint --fix ./src
  • .eslintrc.js
module.exports = {
  extends: ['eslint:recommended'],
  plugins: ['jsdoc'],
  rules: {
    'no-undef': 'error',
    'no-unused-vars': 'error',
    // js注释的检查规范
    'jsdoc/newline-after-description': 1,
    'jsdoc/require-param': 1,
    'jsdoc/require-param-description': 1,
    'jsdoc/require-param-name': 1,
    'jsdoc/require-param-type': 1,
    'jsdoc/require-property': 1,
    'jsdoc/require-property-description': 1,
    'jsdoc/require-property-name': 1,
    'jsdoc/require-property-type': 1,
    'jsdoc/require-returns': 1,
    'jsdoc/require-returns-check': 1
  }
}

9、prettier规范注释语法

  • 步骤
# 安装
npm i -D prettier prettier-plugin-jsdoc
# 项目根目录新建.prettierrc.js
# prettier格式化命令
prettier --write "src/*/*.js"
# 格式化注释自定义配置
  • .prettierrc.js
module.exports = {
  plugins: ['prettier-plugin-jsdoc'],
  jsdocSpaces: 2,
  jsdocDescriptionWithDot: true,
  jsdocDescriptionTag: true,
  jsdocVerticalAlignment: true,
  jsdocKeepUnParseAbleExampleIndent: true,
  jsdocSeparateReturnsFromParam: true,
  jsdocSeparateTagGroups: true,
  jsdocPreferCodeFences: true
}

10、实现静态类型检测

  • src/index.js
// @ts-check
// 项目根目录新建tsconfig.json(需配置allowJs: true,否则@ts-check不生效)

/**
 * @description Name
 * @type {string}
 */
const name = 123

/**
 * @description Number
 * @type {number}
 */
const number = "100"

/**
 * @description Array
 * @type {number[]}
 */
const myArray = [10, 132.12, 100, "Hi", true]

// jsdoc输出文档时控制台会报错,原因是对象的数据类型定义使用了复杂的表达式,需将对象的类型注释拆解开来
// /**
//  * @description Object
//  * @type {{
//  *   readonly id: number,
//  *   name: string,
//  *   age: number | string,
//  *   address?: string
//  * }}
//  */
// const user = {
//     id: 1,
//     name: "Vane",
//     age: "44",
//     address: "上海"
// }
// user.id = 2

/** @constant */
const user = {
    /** @type {number} */
    /** @readonly */
    id: 1,
    /** @type {string} */
    name: "Vane",
    /** @type {string | number} */
    age: "44",
    /** @type {string | null} */
    address: "上海"
}
user.id = 2

/**
 * @description Calculate age
 * @param {number} current Current year
 * @param {number} yearOfBirth Year of birth
 * @return {string} Age
 */
const calculateAge = (current, yearOfBirth) => {
    return `${current - yearOfBirth}`
}
console.log(calculateAge("2021", 2019))

/**
 * @typedef {Object} User
 * @property {number} id
 * @property {string} name
 * @property {number | string} age
 * @property {boolean} [isMale]
 */

/** @type {User} */
const man = {
    id: 1,
    name: "Vane",
    age: 44,
    isMale: 1
}
  • tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true,
    "allowJs": true
  },
  "exclude": [
    "node_modules"
  ]
}
posted on 2023-12-06 15:06  一路繁花似锦绣前程  阅读(97)  评论(0编辑  收藏  举报