当前位置:   article > 正文

技术分享|Vitepress 的实现原理

vitepress

什么是 Vitepress?

Vitepress 是由 Vite 和 Vue 驱动的静态站点生成器,通过获取 Markdown 编写的内容,并可以生成对应的静态 HTML 页面。我们经常使用 Vitepress 构建博客等静态网站,本文主要解析一下 Vitepress 的实现原理,下面就开始吧!

原理

初始化项目

根据官方文档推荐,我们执行以下命令初始化项目:

npx vitepress init

执行完命令便会进入一个设置界面,通过设置项目名等参数,最终生成一个 vitepress 项目。

我们都知道,npx vitepress init 实际上等同于:

  1. npm i -g vitepress
  2. vitepress init

很好理解,先全局安装 vitepress,再执行 vitepress init命令:

先通过 @clack/prompts 开启命令行 UI 界面,用户进行初始化配置:

  1. // src/node/init/init.ts
  2. import { group } from '@clack/prompts'
  3. const options: ScaffoldOptions = await group(
  4. {
  5. root: () =>
  6. text({
  7. message: 'Where should VitePress initialize the config?',
  8. initialValue: './',
  9. validate(value) {
  10. // TODO make sure directory is inside
  11. }
  12. }),
  13. title: () =>
  14. text({
  15. message: 'Site title:',
  16. placeholder: 'My Awesome Project'
  17. }),
  18. // ...以下省略
  19. )

再根据配置项从 template 文件夹中拉取模板文件,完成项目的初始化。

启动服务

在 Vitepress 项目中,我们通过执行以下命令启动文档服务:

vitepress dev

执行完命令,我们便可以在浏览器访问文档网站!

启动服务主要分为两步:

  1. 创建 Vite 服务;
  2. 执行 Vite 插件;
创建 Vite 服务
  1. // src/node/server.ts
  2. import { createServer as createViteServer, type ServerOptions } from 'vite'
  3. import { resolveConfig } from './config'
  4. import { createVitePressPlugin } from './plugin'
  5. export async function createServer(
  6. root: string = process.cwd(),
  7. serverOptions: ServerOptions & { base?: string } = {},
  8. recreateServer?: () => Promise<void>
  9. ) {
  10. // 读取 vitepress 配置
  11. const config = await resolveConfig(root)
  12. if (serverOptions.base) {
  13. config.site.base = serverOptions.base
  14. delete serverOptions.base
  15. }
  16. // 创建 vit
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/841343
推荐阅读
相关标签
  

闽ICP备14008679号