zoukankan      html  css  js  c++  java
  • React 通过注释自动生成文档

    最近找了一些文档的生成工具,结果发现了这个 React Styleguidist 可以通过注释,自动生成对应的文档,对于 react 库来说十分方便

    安装

    npm i -D react-styleguidist
    
    // or
    
    yarn add -D react-styleguidist
    

    typescript 支持

    npm i -D react-docgen-typescript
    

    配置

    这次的例子是使用 cra 来创建的项目,还有其他项目也是支持的 点击参考

    在根文件夹下创建 styleguide.config.js 文件
    可以使用如下的配置

    const path = require('path')
    
    const packagePath = path.resolve(
        __dirname,
        'package.json'
    )
    const packageFile = require(packagePath)
    
    
    module.exports = {
        webpackConfig: require('./config/webpack.config'), // webpack 路径,可以用项目里的,也可以用webpack-blocks创建
        components: 'src/component/**.tsx', // 写入对应目录的文档
        propsParser: require('react-docgen-typescript').withCustomConfig(
            './tsconfig.json'
        ).parse, // 用来支持 tsx
        verbose: true, // 打印详细信息
        updateDocs(docs, file) {
            if (docs.doclets.version) {
                const version = packageFile.version
    
                docs.doclets.version = version
                docs.tags.version[0].description = version
            }
    
            return docs
        }, // 在使用 @version 时 使用 package.json 的 version
        version: packageFile.version, // 同上 使用 package.json 的 version
        usageMode: 'expand', // 自动打开文档的缩放
        pagePerSection: true, // 是否每页一个组件显示
        title: "文档名" // 文档名
    }
    

    更加具体的配置项可以点此参考

    编写注释

    例子 1:

    import React from 'react';
    
    interface IProps {
      /**
       * 用户名
       */
      name: string
      /**
       * 年龄
       */
      age?: number
      /**
       * 工作
       * @default doctor
       */
      work?: string
      /**
       * 修改名字
       * @param name
       */
      changeName?: (name: string) => void
    }
    
    /**
     * Person 组件
     * @version package.json
     * @visibleName Person 组件名称的显示
     */
    function Person(props: IProps) {
      return <div>Person</div>
    }
    
    export default Person;
    

    添加使用用例:

        import Person from './Person';
        <Person name="grewer"/>
    

    图例:

    例子 2:

    import React from 'react';
    
    interface IProps {
      type: 'submit' | 'button'
    
      /**
       * 尺寸
       * @deprecated 使用 size2 替代
       */
      size?: 'small' | 'default'
    
      /**
       * 新的尺寸
       * @since 1.1.0
       * @default large
       */
      size2?: 'small' | 'large'
    }
    
    /**
     * @link [antd button](https://ant.design/components/button-cn/) 可查看
     */
    class Button extends React.Component<IProps, any> {
      static config = {
        desc: "这是 static 属性"
      }
    
      /**
       * 点击事件
       * @public
       */
      clickHandle = (ev: Event) => {
        console.log('!')
      }
    
      render(): React.ReactElement<any, string | React.JSXElementConstructor<any>> | string | number | {} | React.ReactNodeArray | React.ReactPortal | boolean | null | undefined {
        return <div>{this.props.children}</div>
      }
    }
    
    
    export default Button;
    

    图例:

    结果

    使用如下命令,可以创建一个 web 服务,在线修改文档:

    styleguidist server
    

    使用如下命令,可以将文档项目打包

    styleguidist build
    

    如果库正好在 GitHub 上面,可是开通 GitHub Pages 功能,将文档包提交进 GitHub;
    本例结果页面查看:

    https://grewer.github.io/styleguidist-boilerplate/styleguide/

    结语

    当你使用 react 开发而又想要写文档的使用, React Styleguidist 绝对是最好的选择之一
    而如果你的库在 GitHub 上,那么就能够立即生成你的文档站点

  • 相关阅读:
    *Reverse Linked List II
    *Insertion Sort List
    Convert Sorted List to Binary Search Tree
    Reverse Integer
    read cache return null
    纳秒和随机数
    libthread_db
    gdb
    tls session resumption
    http://www.linux-commands-examples.com/xmllint
  • 原文地址:https://www.cnblogs.com/Grewer/p/12168024.html
Copyright © 2011-2022 走看看