# vuepress-apidoc
**Repository Path**: DoLaMi/vuepress-apidoc
## Basic Information
- **Project Name**: vuepress-apidoc
- **Description**: 一个根据 jsdoc 注释生成 api 文档的 vuepress 插件
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-10-25
- **Last Updated**: 2023-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: vuepress, vuepress-plugin, jsdoc, Markdown
## README
### vuepress-apidoc 简介
> 一个能解析 jsdoc 注释和 vue 文件并生成 api 文档的 vuepress 插件
### 功能
- 根据 js、vue 文件 jsdoc
注释输出 markdown
文件;
- 展示 vue 组件,配合使用我的另一个 vuepress 插件,[vuepress-plugin-vue-compdemo](https://www.npmjs.com/package/vuepress-plugin-vue-compdemo)
,识别自定义 md 容器,基本可以和 element-ui 一样的展示效果,具体参考该插件说明文档

- 可自定义分类输出侧边文档导航栏;
- 兼容 vuepress 目前所有版本 v0.x
、v1.x
和 v2.x
;

### 生成 jsdoc 注释
- 一般 vscode 有很多这类的插件:一般我是用的是 [Document This](https://marketplace.visualstudio.com/items?itemName=oouo-diogo-perdigao.docthis)
### 起步
```bash
# 安装
npm i -D vuepress-apidoc
# 生成api文档
vuepress-apidoc -c 配置文件路径
# 例如,自行在本地创建config文件
vuepress-apidoc -c ./config/config.js
# 或
vuepress-apidoc -c ./config/config.json
```
### 命令行参数
- -c
:配置文件配置文件路径(必须)
- -v
:查看版本号
### 产物
- md 文件(一般将其输出路径dist
设置到 vuepress 的 docs 目录即可)
- sidebar 的 config.js
文件
### 使用 sidebar 的 config.js 文件
- 一般是在 vuepress 项目的配置文件中引入
- 例如:vuepress 的 v2.x 版本的配置文件在.../docs/.vuepress/config.js 中引入
```js
// docs/.vuepress/config.js
// 引入导出的sidebar配置config.js
const { getApiSidebarList } = require('../api/config')
let sidebarList = {
// 这里可以写你其他的侧边栏导航
// 例如
// v1.x、v0.x
// '/other/': [
// {
// title: 'other',
// collapsable: false, // 可选的, 默认值是 true,
// children: ['/other/other.md']
// }
// v2.x
// '/other/': [
// {
// text: 'other',
// children: [
// '/other/other.md'
// ]
// }
// ]
}
// 将getApiSidebarList()返回的对象,覆盖到sidebarList
sidebarList = Object.assign({}, sidebarList, getApiSidebarList())
// vuepress配置
module.exports = {
themeConfig: {
sidebar: sidebarList
}
}
```
### config 配置文件
- 接受两种文件格式:.js
或者.json
- src
(array):js 文件目录或文件路径
- rotuerName
(string):输出 vuepress 导航路由名,默认:'api'
- dist
(string):markdown 文件和 sidebar 配置文件输出目录路径,默认:'../docs'
- readme
(object):rotuerName
路由下的首页 README.md 文件配置,若不设置,则默认输出所有 api 的 md 文件列表并写出新的 README.md
- path
(string):输入的 README.md 文件路径,默认:空
- outputName
(string):输出名称,默认:README.md
- isOutputApiList
(boolean):是否在 README.md 最后追加所有 api 的 md 文件列表数据,默认:true
- sidebarTree
(array):自定义 vuepress 的 sidebar 分类,默认:归类到 API 栏下
- title
(string): 分类名称
- include
(array): 该分类包含的源文件匹配,多个规则只要符合一个规则就会添加
- exclude
(array): 该分类忽略的源文件匹配,多个规则只要符合一个规则就会忽略
- info
(boolean):是否输出详情日志,默认:true
- include
(array):包含的源文件匹配,多个规则只要符合一个规则就会添加
- exclude
(array):忽略的源文件匹配,多个规则只要符合一个规则就会忽略
- vuepressVersion
(number):vuepress 的版本,例如 v1.x,则vuepressVersion
:1
,默认:2
- defaultSiebarName
:默认的侧边栏分类名称,默认:'API'
- jsdoc
(object):jsdoc 的配置
- configure
(string): getJsdocData 的 configure 配置项,既是 jsdoc 的配置文件路径
- vueDoc
(object):vue 文件文档配置
- autoOutput
(object):vue 文件输出的 md 文档配置,默认都为 true,如果不需要则设置对应的为 false 即可
- title
(boolean): 默认:true
,是否输出顶部的 title
- props
(boolean): 默认:true
,是否输出 props
- slot
(boolean): 默认:true
,是否输出 slot
- method
(boolean): 默认:true
,是否输出 method
- event
(boolean): 默认:true
,是否输出 event
### 注意
- 该插件是根据配置文件所在目录作为源的根目录
- 例如配置文件路径在:E:\code\vuepress-apidoc\config\config.js
- 那么相对路径就是根据 E:\code\vuepress-apidoc\config,作相对的
- 在 config.js
配置项中写,"../src"
,那么他的路径就是,E:\code\vuepress-apidoc\src
- 也可以在 config.js
配置 info
属性为 true
,查看路径是否正确
### 文件匹配写法
- 参考:[micromatch 的 contains 方法](https://www.npmjs.com/package/micromatch#contains)
### config.js
```js
const config = {
src: ['../src'],
rotuerName: 'api',
dist: '../docs',
defaultSiebarName: 'API',
readme: {
path: '../README.md',
outputName: 'README.md',
isOutputApiList: false
},
sidebarTree: [
{
title: '工具类',
include: ['utils/**'],
exclude: []
}
],
info: false,
include: ['*.js'],
exclude: ['node_modules'],
vuepressVersion: 2,
// jsdoc: {
// configure: ''
// },
// vue doc文档配置
vueDoc: {
// 输出配置,是否需要自动检测文件输出对应的 event、props、slot、method,默认都为true,如果不需要则设置对应的为false即可
autoOutput: {
title: true,
// 是否输出props
props: true,
slot: true,
method: true,
event: true
}
}
}
module.exports = config
```
### js 文件的 jsdoc
- 写法可以参考[jsdoc](https://jsdoc.zcopy.site/)
```js
/**
* 订阅事件
* @param {*} type 事件名
* @param {*} scope 作用域
* @param {*} callback 回调
* @param {*} [params=[]] 回调参数
* @memberof EventManager
*/
on(type, scope, callback, params = []) {
// 订阅的放到数组记录
const listenerParams = { callback: callback, scope: scope, params: params, isOnce: false }
this.addListener(type, listenerParams)
}
```
### vue 文件的 jsdoc
- 写法可以参考 [vue-docgen-api](https://www.npmjs.com/package/vue-docgen-api)、[jsdoc](https://jsdoc.zcopy.site/)
```html
./Button.md
```
### 如何在 vue 文件中直接引入 markdown 文件
- 插件会直接读取\...\ 中间的路径文件内容,并输出到最后的 md 文件中
- 如果有需要可以输入多个 demo,但是一般一个就够了
- md 文件中,可以是任何 md 内容或是组件的演示文档[vuepress-plugin-vue-compdemo](https://www.npmjs.com/package/vuepress-plugin-vue-compdemo)
```html
文件路径1
文件路径2
```
### 参考
- [micromatch](https://www.npmjs.com/package/micromatch#contains)
- [vuepress](https://vuepress.vuejs.org/zh)
- [commander](https://github.com/tj/commander.js/blob/HEAD/Readme_zh-CN.md)
- [jsdoc-to-markdown](https://github.com/jsdoc2md/jsdoc-to-markdown)
- [vue-docgen-api](https://www.npmjs.com/package/vue-docgen-api)
- [vuepress-jsdoc](https://github.com/ph1p/vuepress-jsdoc)
- [vuepress-plugin-vue-compdemo](https://www.npmjs.com/package/vuepress-plugin-vue-compdemo)