文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于Vite 的组件文档编写神器,又快又省心

2024-12-02 11:42

关注

现在 Vite 的生态逐渐完善,今天给大家介绍一款 React 的组件/应用文档编写神器:vite-plugin-react-pages

目前主流搭建文档站点的方式:

  1. Gatsby - 以 GraphQL 为核心,功能相当完善,插件生态丰富。但学习曲线高(React)
  2. Docusaurus - Meta 公司出品。功能强大,与 Gatsby 相似(React)
  3. dumi - 一款 UmiJS 生态中的组件开发文档工具(React)
  4. Nextra - 一个基于 Next.js 的静态站点生成器。(React)
  5. VuePress - 包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题(Vue)
  6. VitePress - 对 VuePress 进行了不少的改进。VitePress 旨在降低当前 VuePress 的复杂性,并从其极简主义的根源重新开始。(Vue)

除了 VitePress 之外,其他都是用 Webpack 作为开发服务器。一个只有几页的简单文档站点启动开发服务器所花费的时间变得难以忍受。即使是 HMR 更新也可能需要几秒钟才能反映在浏览器中。Vite 的出现很好地解决了这些问题:近乎即时的服务器启动、仅编译所服务页面的按需编译以及闪电般快速的 HMR。

作为 Vite 的基础上的文档方案, VitePress 只支持 Vue。

翻阅 Vite 的官方库列表,偶然发现了一款 star 数量仅 100 多的文档解决方案 vite-plugin-react-pages。开始用试试水的心态去去体验一把,结果发现相当好用。就是知道的人太少了。现在,我们从使用者的角度去解析它好用的功能。

特性

vite-plugin-react-pages(vite-pages) 是一个由 vite 提供支持的 React 应用程序框架。它非常适合:

它提供了许多帮助开发人员快速构建 React App 的功能:

使用

vite-pages 默认提供了三种模板,可以选择初始化app(应用)、lib(组件库)、lib-monorepo

可以通过命令创建一个自己的初始仓库

  1. npm init vite-pages [仓库名] --template [模板名] 

我们执行 npm init vite-pages library-demo --template lib 生成了一个典型的 Vite 结构的项目,有熟悉的 vite.config.ts、pages 文件夹等

该插件所有明确的依赖包作用:

pages 目录为文档入口。文件式路由约定用 $ 符号的文件名结尾来识别为一个文档页面。

.ts|.tsx|.js|.jsx|.md|.mdx 只要 $ 是扩展名前的最后一个字符,所有文件扩展名都有效。

pages 目录中还存在一个特殊的入口 _theme.tsx 用来配置当前文档的主题,vite-pages 默认使用了 vite-pages-theme-doc 官方主题。如果自定义需求不大,可以通过配置官方主题的参数来实现常规的功能。比如配置 logo、顶部链接、左侧菜单等。

我们来看看首页文档代码

  1. --- 
  2. title: 首页 
  3. --- 
  4.  
  5. import README from '../README.md' 
  6.  
  7.  

引入了 README.md 文档作为首页内容,在 MDX 里,文档和组件契合得相当完美。

接下来新建一个文档,粘贴一篇之前写过的主题 

菜单名称会优先使用 md 文件中的一级,否则使用文件名。也可以在 md 文件的首行加入以下代码设置:

  1. --- 
  2. title: mac-scrollbar 
  3. group: components 
  4. subGroup: general 
  5. --- 

group 一级分组,会显示在头部列表区域;subGroup 二级分组,会将左侧菜单分组显示。

可以通过 _theme.tsx 更改分组名和分组顺序

  1. sideNavs: (ctx) => { 
  2.   return defaultSideNavs(ctx, { 
  3.     groupConfig: { 
  4.       components: { 
  5.         general: { 
  6.           label: '通用'
  7.           order: 1, 
  8.         }, 
  9.         dataRecord: { 
  10.           label: '数据录入'
  11.           order: 2, 
  12.         }, 
  13.       }, 
  14.     }, 
  15.   }); 
  16. }; 

用它写文档体验相当不错,markdown 主题默认自带 github 样式,排版清晰。热更新做得非常棒,更改后即时就能看到效果。

接下来我们用它来做一个组件看看效果如何,做一个最基础的按钮组件

首先定义组件类型:

  1. interface ButtonProps extends React.HTMLAttributes { 
  2.    
  3.   type?: 'primary' | 'default' | 'text'
  4.    
  5.   size?: 'large' | 'middle' | 'small'
  6.    
  7.   loading?: boolean; 

简单实现:

  1. import React from'react'
  2. import { ButtonProps } from'./types'
  3. import styles from'./style.module.css'
  4.  
  5. const Button = ({ className, type, ...props }: ButtonProps) => { 
  6.   return ( 
  7.     
  8.       {...props} 
  9.       className={[styles.button, type === 'primary' && styles.primary, className].filter(Boolean).join(' ')} 
  10.     /> 
  11.   ); 
  12. }; 
  13.  
  14. exportdefault Button; 

 接着写一些 Demo

  1.  
  2.  
  3. import React from'react'
  4. import { Button } from'my-lib'
  5.  
  6. const Demo1 = () => { 
  7.   return
  8. }; 
  9.  
  10. exportdefault Demo1; 

 最后,在文档中引入这些 Demo

  1. --- 
  2. title: Button 
  3. subGroup: general 
  4. --- 
  5.  
  6. # Button 
  7.  
  8. 一个简单的按钮组件 
  9.  
  10. "./demos/demo1.tsx" /> 
  11.  
  12. "./demos/demo2.tsx" /> 

看看效果:

用它来调试组件相当省心,调试完成等于文档也写好了,还有自动提取的代码演示,做到了开箱即用。

组件很重要的一部分是 API 文档,要是能自动从 typescript 注释中提取就好了。没错,vite-pages 支持了这项功能。

只需要在 MDX 中引入 TsInfo 组件,并设置类型地址和名称:

  1. "./types.ts" name="ButtonProps" /> 

将 ts 类型提取出一个表格,能识别必填/描述/默认值等。有了这个功能就不用担心文档和代码割裂的问题了

目前这个插件官方主题自带趋向于组件文档模式,基本功能齐全,没有多余花哨的功能。如果想实现组件在线编辑预览的话,可以 fork vite-pages-theme-doc 这个库,然后可以改为自己想要的样式,添加 react-live 支持在线实时编辑预览。

官方默认没有提供博客主题。自己实现不难,因为 vite-plugin-react-pages 不渲染任何 DOM 节点,一切渲染相关都可以从 vite-pages-theme-doc 这个库中修改。

小提示

总结当前使用情况来看,使用了该插件会使 Vite 自动依赖预构建失效。你需要手动将 node_modules 中的包添加到 optimizeDeps.include 中。比如 vite-pages-theme-doc 、lodash 等,否则会出现打开页面的时候重复刷新的情况。

 

来源:前端星辰内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯