VitePress 学习(全面拥抱vite)---翻译

什么是VitePress?

VitePress 是早期的 WIP!目前的重点是首先使 Vite 稳定和功能完整。目前还不建议在任何重要的情况下使用这个

VitePress 是 VuePress 的兄弟,它建立在 Vite 之上

vuePress=webpack+vue2,vitePress=vite+vue3

动机

我们喜欢 VuePress v1,但是由于构建在 Webpack 之上,对于一个只有几个页面的简单文档站点来说,启动开发服务器所花费的时间简直令人难以忍受。而且 HMR 更新也可能需要数秒才能反映到浏览器中

作为参考,Composition API RFC repo 只有两个页面,但是启动服务器需要 4 秒,而在浏览器中反映任何编辑几乎需要 2 秒。

从根本上说,这是因为 VuePress v1 在本质上是一个 Webpack 应用程序。即使只有两个页面,它也是一个完整的正在编译的 Webpack 项目(包括所有主题源文件)。更糟糕的是,当项目有很多页面时,服务器必须首先完全编译每个页面,然后才能显示任何内容

顺便说一句,Vite 很好地解决了这些问题:服务器几乎立即启动,按需编译只编译所服务的页面,以及快速的 HMR。另外,随着时间的推移,我注意到 VuePress v1 中还有一些额外的设计问题,但由于需要大量的重构,一直没有时间来修复。

现在,有了 Vite 和 Vue 3,真的是时候重新考虑“Vue 驱动的静态站点生成器”

在 VuePress v1 的改进

VuePress v1....有一些改进

它使用的是 Vue 3

利用 Vue 3 改进的模板静态分析来尽可能严格地约束静态内容。静态内容以字符串文本的形式发送,而不是 JavaScript 呈现函数代码,因此 JS 有效负载解析起来更容易,hydration也变得更快。

客户端接到 SSR 响应之后,为了支持(基于 JavaScript 的)交互功能,仍然需要创建出组件树,与 SSR 渲染的 HTML 关联起来,并绑定相关的 DOM 事件,让页面变得可交互,这个过程称为 hydration

注意:应用优化的同时仍然允许用户在 markdown 内容中自由混合 Vue 组件–编译器会自动为您进行静态/动态分离,您无需考虑它。

它使用 Vite 之下的优势更轻的页面其他不同

VitePress 更多的是坚持自己想法和减少配置:VitePress 的目标是缩小当前 VuePress 的复杂性,并从它的最简主义根源重新开始。

VitePress 是面向未来的:VitePress 只针对支持原生 ES 模块导入的浏览器。它鼓励使用不需要翻译的本地 JavaScript 和用于主题化的 CSS 变量。

这会成为未来的下一个 VuePress 吗?

我们已经有了 VuePress -next,这将是 VuePress 的下一个主要版本。它还比 VuePress v1 做了很多改进,现在还支持 Vite。VitePress 不兼容当前的 VuePress 生态系统(主要是主题和插件)。总体想法是,VitePress 将拥有一个更简约的主题 API(更喜欢 JavaScript API 而不是文件布局约定),并且可能没有插件(所有定制都在主题中完成)。

入门

本节将帮助您从头开始构建一个基本的 VitePress 文档站点。如果您已经有了一个现有的项目,并且希望将文档保存在项目中,那么从步骤 3 开始。

步骤 1:创建并更改到一个新目录。

mkdir vitepress-starter && cd vitepress-starter

步骤 2:用首选yarn包管理器初始化。

yarn init

步骤 3:本地安装 VitePress

yarn add --dev vitepress

步骤 4:创建您的第一个文档

mkdir docs && echo '# Hello VitePress' > docs/index.md

步骤 5:向 package.json 中添加一些脚本。

{
  "scripts": {"docs:dev": "vitepress dev docs","docs:build": "vitepress build docs","docs:serve": "vitepress serve docs"
  }}

步骤 6:在本地服务器上提供文档站点。

$ yarn run docs:dev

到目前为止,您应该已经有了一个基本但功能强大的 VitePress 文档站点。

当您的文档站点开始形成时,请务必阅读部署指南。

结构

没有任何配置,页面非常小,用户无法在站点周围导航。为了定制你的站点,让我们首先在 docs 目录中创建一个。vitepress 目录。

这是所有特定于 vitepress 的文件将被放置的地方。您的项目结构可能是这样的

.
├─ docs
│  ├─ .vitepress
│  │  └─ config.js
│  └─ index.md
└─ package.json

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第1张

配置 VitePress 站点的基本文件是.VitePress/config.js,它应该导出一个 JavaScript 对象:

module.exports = {
  title: 'Hello VitePress',
  description: 'Just playing around.'}

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第2张

查看配置参考以获得完整的选项列表

资源处理相对路径

所有的 Markdown 文件都会被 webpack 编译成 Vue 组件,因此你可以,并且应该更倾向于使用相对路径(Relative URLs)来引用所有的静态资源:

文件需要放到docs下,不然图片显示不出来

![An image](./image.png)

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第3张

你可以在你的 markdown 文件中引用静态资产。使用绝对公共路径(基于项目根目录)或相对路径(基于您的文件系统)的主题、样式和普通的.css 文件中的 Vue 组件。如果您使用过 vue-cli 或 webpack 的文件加载器file-load,后者类似于您所习惯的行为。

常见的图像、媒体和字体文件类型将被自动检测并作为资产包括进来。

所有引用的资源,包括那些使用绝对路径的资源,都将被复制到生产版本中带有哈希文件名的 dist 文件夹中。从未引用过的资产将不会被复制。与 vue-cli 类似,小于 4kb 的图像资产将采用 base64 内联。

公共文件

有时你可能需要提供静态资产,这些资产不会直接被你的 Markdown 或主题组件引用(例如,favicons 和 PWA icons)。项目根目录下的公共目录可以用作一个逃生出口,以提供静态资产,这些资产要么永远不会在源代码中引用(例如 robots.txt),要么必须保持完全相同的文件名(没有散列)。

放置在公共位置的资产将原样复制到 dist 目录的根目录中。

请注意,应该使用根绝对路径引用公共文件-例如,public/icon.png 在源代码中应始终作为/icon.png 引用。

基础路径

如果站点部署到非根 URL,则需要在.vitepress/config.js 中设置 base 选项。例如,如果您计划将站点部署到foo.github.io/bar/,则应将bas…

对于基本 URL,要在公共场合引用图像,必须使用/bar/image.png 这样的 URL。但如果你决定改变基础,这是脆弱的。为了帮助实现这一点,VitePress 提供了一个内置的助手$withBase(注入到 Vue 的原型中),它可以生成正确的路径:

src="$withBase('/foo.png')" alt="foo" />

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第4张

Markdown 拓展Header Anchors

所有的标题将会自动地应用 anchor 链接,anchor 的渲染可以通过 markdown.anchor 来配置。

链接内部连接

内部链接转换为路由器链接,用于 SPA 导航。此外,每个子目录中包含的每个 index.md 都将自动转换为 index.html,并带有相应的 URL/。

例如,给定以下目录结构:

.
├─ index.md
├─ foo
│  ├─ index.md
│  ├─ one.md
│  └─ two.md
└─ bar
   ├─ index.md
   ├─ three.md
   └─ four.md

提供其中之一 foo/one.md

[Home](/) 
[foo](/foo/) 
[foo heading](./#heading) 
[bar - three](../bar/three.md) 
[bar - four](../bar/four.html)

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第5张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第6张

页面后缀

默认情况下,生成的页面和内部链接的后缀是.html。

外部链接

出站的链接自动获得target=" blank"heading-20">前言

YAML frontmatter 外网 支持开箱即用:

注意的是采用三虚线必须放置在 markdown 文件的 最上面

---title: Blogging Like a Hackerlang: en-US---

frontmatter可供选择的 frontmatter 格式

任何包含 YAML frontmatter 块的 Markdown 文件都将被 gray matter 处理。frontmatter 必须位于 Markdown 文件的顶部,并且必须采用三条虚线之间的有效 YAML 集的形式。例子:

$frontmatter 很重要,vitePress 只识别这个----三条虚线块有且只有一个

---title: tagsdate: 2019-08-13 09:39:50type: tagslayout: tag---# Hello VitePress# {{ $frontmatter.date }}

在三虚线之间,您可以设置预定义的变量,甚至创建您自己的自定义变量。这些变量可以通过$frontmatter 变量来使用。这里有一个例子,你可以在你的 Markdown 文件中使用它

VitePress 还支持 JSON 前端语法,以花括号开始和结束【俩种写法不能共存】

---{  "title": "Blogging Like a Hacker",  "editLink": true}---# {{ $frontmatter.title }}

预定义的变量

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第7张

---head:
  - - meta- name: description  content: hello
  - - meta- name: keywords  content: super duper SEO---

头部消失

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第8张

左边消失

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第9张

该数据对页面的其余部分以及所有自定义和主题化组件都可用。

详情请参阅 Frontmatter

GitHub 风格的表格

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

输出

TablesAreCool

col 3 is

right-aligned

$1600

col 2 is

centered

$12

zebra stripes

are neat

$1

:tada: :100:

输出

[[toc]]

输出

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第10张

目录(Table of Contents)的渲染可以通过 markdown.toc 选项来配置。

自定义容器

自定义容器可以通过它们的类型、标题和内容来定义

默认提示

::: tipThis is a tip:::::: warningThis is a warning:::::: dangerThis is a dangerous warning:::

输出

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第11张

自定义提示

::: danger STOPxxxxxxDanger zone, do not proceed:::

输出

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第12张

代码块中的语法高亮显示

```jsexport default {
  name: 'MyComponent',  // ...}
```

输出

export default {
  name: 'MyComponent'
  // ...}
```html<ul>
  <li v-for="todo in todos" :key="todo.id">
    {{ todo.text }}
  li>
ul>
```

输出

<ul>
  <li v-for="todo in todos" :key="todo.id">{{ todo.text }}li>ul>

有有效语言的列表。

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第13张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第14张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第15张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第16张

代码块中的行高亮显示

```js{4}export default {  data () {return {
      msg: 'Highlighted!'}
  }
}
```

输出

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第17张

除了单行之外,您还可以指定多个单行、范围或同时指定

```js{1,4,6-7}export default { // Highlighted
  data () {return {
      msg: `Highlighted!
      This line isn't highlighted,
      but this and the next 2 are.`,
      motd: 'VitePress is awesome',
      lorem: 'ipsum',
    }
  }
}

输出

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第18张

行号

您可以通过 config 为每个代码块启用行号

module.exports = {
  markdown: {
    lineNumbers: true
  }
}

导入代码片段

您可以通过以下语法从现有文件导入代码片段

<<< @/filepath

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第19张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第20张

它还支持行高亮显示

<<< @/filepath{highlightLines}

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第21张

VitePress 学习(全面拥抱vite)---翻译,markdown,vue,前端组件,语言翻译,webpack,第22张

此处的 @ 默认值是 process.cwd()。

你也可以使用 VS Code 区域只包含代码文件的相应部分。您可以在文件路径后面的#后面提供自定义区域名称(默认情况下是代码片段)

进阶配置

VitePress 使用 markdown-it 来渲染 Markdown,上述大多数的拓展也都是通过自定义的插件实现的。想要进一步的话,你可以通过 .vitepress/config.js 的 markdown 选项,来对当前的 markdown-it 实例做一些自定义的配置:

module.exports = {  markdown: {// markdown-it-anchor 的选项anchor: { permalink: false },// markdown-it-toc 的选项toc: { includeLevel: [1, 2] },config: (md) => {      // 使用更多的 markdown-it 插件!  md.use(require('markdown-it-xxx'))
    }
  }
}

在 Markdown 中使用 Vue浏览器的 API 访问限制

当你在开发一个 VitePress 应用时,由于所有的页面在生成静态 HTML 时都需要通过 Node.js 服务端渲染,因此所有的 Vue 相关代码都应当遵循 编写通用代码 的要求。简而言之,请确保只在 beforeMount 或者 mounted 访问浏览器 / DOM 的 API。

如果您正在使用或演示的组件不是 ssr 友好的(例如,包含自定义指令),您可以将它们包装在内置的组件中

<ClientOnly>
  <NonSSRFriendlyComponent/>ClientOnly>

请注意,这并不能解决一些组件或库在导入时就试图访问浏览器 API 的问题 &mdash;&mdash; 如果需要使用这样的组件或库,你需要在合适的生命周期钩子中动态导入它们

<script>export default {
  mounted () {import('./lib-that-access-window-on-import').then(module => {      // use code})
  }
}script>

如果你的模块导出了一个默认的 Vue 组件,你可以动态注册它

<template>
  <component v-if="dynamicComponent" :is="dynamicComponent">component>template><script>export default {  data() {return {      dynamicComponent: null}
  },
  mounted () {import('./lib-that-access-window-on-import').then(module => {      this.dynamicComponent = module.default})
  }
}script>

模板语法插值

每一个 Markdown 文件将首先被编译成 HTML,接着作为一个 Vue 组件传入 vue-loader,这意味着你可以在文本中使用 Vue 风格的插值:

{{ 1 + 1 }}

输出

2

指令

同样地,也可以使用指令:

<span v-for="i in 3">{{ i }} span>

输出

123

访问网站以及页面的数据

{{ $page }}

输出

{"title": "tagsadsandbsamnbdmnasbdnmasbd","description": "hello","frontmatter": {"title": "tagsadsandbsamnbdmnasbdnmasbd","editLink": true,"tags": "dd","head": [["meta",{"name": "description","content": "hello"}],["meta",{ "name": "keywords", "content": "super duper SEO" }]]},"relativePath": "index.md","lastUpdated": 1621777101000}

Escaping

默认情况下,块级 (block) 的代码块将会被自动包裹在 v-pre 中。如果你想要在内联 (inline) 的代码块或者普通文本中显示原始的大括号,或者一些 Vue 特定的语法,你需要使用自定义容器 v-pre 来包裹:

::: v-pre
`{{ This will be displayed as-is }}`
:::

输出

使用组件

当你需要更多的灵活性时,VitePress 允许你用自己的 Vue 组件扩展你的创作工具箱。

低价导入组件

如果您的组件将只在少数地方使用,那么推荐的使用方法是在使用它的文件中导入组件。

# Docs
This is a .md using a custom component<CustomComponent />## More docs
...<script setup>import CustomComponent from '../components/CustomComponent.vue'script>

在主题中注册全局组件

如果这些组件将在文档中的多个页面中使用,它们可以在主题中全局注册(或者作为扩展默认 VitePress 主题的一部分)。查看定制指南获取更多信息。

在.vitepress/theme/index.js 中,enhanceApp 函数接收 Vue 应用程序实例,以便您可以像在常规 Vue 应用程序中一样注册组件。

import DefaultTheme from 'vitepress/theme'export default {
  ...DefaultTheme,  enhanceApp({ app }) {
    app.component('VueClickAwayExample', VueClickAwayExample)
  }
}

稍后在您的标记文件中,组件可以在内容之间交错

# Vue Click Away

重要:请确保一个自定义组件的名字包含连接符或者是 PascalCase,否则,它将会被视为一个内联元素,并被包裹在一个

标签中,这将会导致 HTML 渲染紊乱,因为 HTML 标准规定,

标签中不允许放置任何块级元素。

在标题中使用组件Markdown输出的 HTML解析后的标题

# text

text

text

# text

text

text

由<code>封装的 HTML 将按原样显示;只有没有包装的 HTML 才会被 Vue 解析。

输出的 HTML 由 markdown-it 完成。而解析后的标题由 VuePress 完成,用于侧边栏以及文档的标题。

使用预处理器

VitePress 内置了对 CSS 预处理器的支持:.scss, .sass, .less, . style 和.stylus 文件。不需要为它们安装特定于 vite 的插件,但是必须安装相应的预处理器本身

# .scss and .sassnpm install -D sass# .lessnpm install -D less# .styl and .stylusnpm install -D stylus

然后您可以在 Markdown 和主题组件中使用以下内容

<style lang="sass">.title
  font-size: 20pxstyle>

脚本和样式提升

有时,你可以只想在当前页面应用一些 JavaScript 或者 CSS,在这种情况下,你可以直接在 Markdown 文件中使用原生的 <script> 或者 <style> 标签,它们将会从编译后的 HTML 文件中提取出来,并作为生成的 Vue 单文件组件的 <script> 和 <style> 标签

内置组件

VitePress 提供内置的 Vue 组件,如 ClientOnly 和 OutboundLink,查看全局组件指南了解更多信息。

部署

「小礼物走一走?华子可乐来一个!」

还没有人赞赏,支持一下吧

哇~真是太棒了 感谢大佬支持

可乐华子奶茶傍一矿泉水
支付宝
内容投诉

下载说明:

1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久VIP能下载全站会员专属源码了,所以单独购买也好,会员也好均不提供相关技术服务。

2.如果源码下载地址失效请 提交留言(点击我)进行补发。

3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!

4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【晓梦云】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。

5.请您认真阅读上述内容,购买即以为着您同意上述内容。


晓梦云资源网 » VitePress 学习(全面拥抱vite)---翻译

发表评论

您需要后才能发表评论

晓梦云资源站、分享更多优质有趣的源码!

特权介绍 留言处理