Gatsby Rehype Meta Attributes 插件演示
April 07, 2025
3 min read
#核心功能与实例
该插件支持两种主要的元数据格式,下面展示每种格式的写法与效果:
#1. 键值对
键值对格式允许你为代码块添加明确的属性和值,如标题、语言等信息。
Markdown
```javascript title="键值对" lineNumber={true} highlight={2,4-6}// 这是一个JavaScript示例function greeting(name) {return `Hello, ${name}!`}console.log(greeting("World"))```
键值对JavaScript
// 这是一个JavaScript示例function greeting(name) {return `Hello, ${name}!`}console.log(greeting("World"))
常用的键值对属性包括:
title="文件名"
- 添加代码块标题lineNumber
- 显示行号filename="路径/文件名"
- 指定文件路径和名称language="javascript"
- 指定语言(通常直接在反引号后指定)
#2. 属性简写
属性简写是一种使用花括号指定行号范围的简洁语法,特别适用于代码高亮。
Markdown
```jsx title="属性简写" lineNumber {2,4-6}import React from "react"// 这行将被高亮(第2行)const App = () => {// 第4-6行也会被高亮const message = "Hello, World!"return <div>{message}</div>}export default App```
属性简写JSX
import React from "react"// 这行将被高亮(第2行)const App = () => {// 第4-6行也会被高亮const message = "Hello, World!"return <div>{message}</div>}export default App
高亮语法规则:
- 单行高亮:
{2}
- 多行高亮:
{4-6}
- 组合高亮:
{2,4-6,8}
#组合使用示例
你可以同时使用键值对和属性简写,创建功能更丰富的代码块:
Markdown
```typescript title="component.tsx" lineNumber {3,5-7}import React from "react"// 第3行会被高亮const MyComponent: React.FC = () => {// 第5-7行也会被高亮const data = fetchData()return <div>{data}</div>}export default MyComponent```
component.tsxTypeScript
import React from "react"// 第3行会被高亮const MyComponent: React.FC = () => {// 第5-7行也会被高亮const data = fetchData()return <div>{data}</div>}export default MyComponent
#转换原理
当你在 Markdown 中添加这些元数据时,gatsby-rehype-meta-attributes 插件会将它们转换为 HTML 的属性。例如:
Markdown
```css title="styles.css" {2-4}body {font-family: "Arial", sans-serif;margin: 0;padding: 0;}```
styles.cssCSS
body {font-family: "Arial", sans-serif;margin: 0;padding: 0;}
将被转换为以下 HTML:
Markup
<pre><code class="language-css" title="styles.css" highlight="2-4">body {font-family: "Arial", sans-serif;margin: 0;padding: 0;display: none;}</code></pre>
这些 HTML 属性可以被 CSS 或 JavaScript 捕获,应用特定的样式或行为,如高亮显示特定行等。