前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

如果我们提供了一个 sdk 给别人用,那么要把有哪些 api、都有什么参数等等信息写到文档中,并且每次改代码都要同步更新下文档。这件事情很繁琐,靠人来维护也不靠谱,可不可以自动生成呢?

api 文档的生成也是根据源码信息来的,有哪些函数、类、都有啥参数、参数是什么类型,这些都在源码里面,而更多信息一般都会写在注释里。我们可以通过 babel 取到这些信息,那么自然可以自动生成文档。

# 思路分析

比如这样一段代码:

/**
 * say 你好
 * @param name 名字
 */
function sayHi (name: string, age: number, a: boolean) {
    console.log(`hi, ${name}`);
    return `hi, ${name}`;
}

/**
 * 类测试
 */
class Guang {
    name: string; // name 属性
    constructor(name: string) {
        this.name = name;
    }

    /**
     * 方法测试
     */
    sayHi (): string {
        return `hi, I'm ${this.name}`;
    }
}
@前端进阶之旅: 代码已经复制到剪贴板

我们要处理 FunctionDeclaration 节点和 ClassDelcaration 节点:

FunctionDelcaration:

  • 函数名: path.get(‘id’).toString()
  • 参数: path.get(‘params’)
  • 返回值类型: path.get(‘returnType’).getTypeAnnotation()
  • 注释信息:path.node.leadingComments

注释可以使用 doctrine 来 parse,支持 @xxx 的解析

ClassDeclaration:

  • 类名:path.get(‘id’).toString()
  • 方法:travese ClassMethod 节点取信息(包括 constructor 和 method)
  • 属性: traverse ClassProperty 节点取信息
  • 注释信息: path.node.leadingComments

有了这些信息之后,就可以打印成文档了,打印就是拼接字符串的过程,可以支持 markdown、html、json 等格式。

我们来写下代码。

# 代码实现

首先搭一个插件的基本结构:

const { declare } = require('@babel/helper-plugin-utils');

const autoDocumentPlugin = declare((api, options, dirname) => {
    api.assertVersion(7);

    return {
        pre(file) {
            file.set('docs', []);
        },
        visitor: {
            FunctionDeclaration(path, state) {
            },
            ClassDeclaration (path, state) {
            }
         },
         post(file) {
            const docs = file.get('docs');
        }
    }
}
@前端进阶之旅: 代码已经复制到剪贴板

我们在全局的 file 对象中放一个 docs 的数组,用于收集信息。

fe

基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏