900 字
约 3 分钟
0
Expressive Code 入门:代码块高亮的终极方案

Expressive Code 入门:代码块高亮的终极方案

技术博客的代码块就是门面:语法高亮准不准、行号有没有、能不能折叠——Expressive Code 把这些全部做成了插件。

它是什么

Expressive Code 是 Astro 官方推荐的代码块渲染引擎(也是独立可用的库),基于 Shiki 高亮器。相比 Astro 内置的默认代码块,它提供三个杀手锏:行号、可折叠代码区、帧标题,全部通过代码块 fenced语法里的 meta 信息驱动,Markdown 里零侵入。

pnpm add astro-expressive-code @expressive-code/core \
  @expressive-code/plugin-line-numbers \
  @expressive-code/plugin-collapsible-sections
// astro.config.mjs
import expressiveCode from 'astro-expressive-code';

export default defineConfig({
  integrations: [
    expressiveCode({
      themes: ['github-dark', 'github-light'],   // 多主题自动跟随站点深浅色
      plugins: ['line-numbers', 'collapsible-sections'],
    }),
  ],
});

三个核心能力

1. 帧标题与语言标签。代码块第一行写 meta:

```ts title="src/utils/date.ts" showLineNumbers
export function format(d: Date): string {
  return d.toISOString();
}
```

渲染出一个带标题栏(src/utils/date.ts)、有语言徽标、有行号的代码框——复制按钮也是自动的。技术文章里引用具体文件路径时,这个标题栏信息量巨大。

2. 行高亮与差异标记。meta 里标记重点行:

```js ins={2} del={3} mark={5-7}
const a = 1;         // 普通行
const b = 2;         // 绿底:新增
const c = 3;         // 红底:删除
// ...
```

mark 高亮重点行、ins/del 表达增删——讲 diff、讲重构前后对比时是表达力质变。

3. 折叠区。长代码默认折叠中段,读者点开看全文:

```ts collapse={3-40} title="完整配置(点击展开)"
const config = {
  // 第 1、2 行可见
  // ...中间 38 行默认折叠
  // 最后 2 行可见
};
```

教程类文章贴长配置文件(如 vite.config.ts、docker-compose.yml)时必备——读者扫一眼开头结尾,需要细节再展开,页面不再被百行代码撑得老长。

主题系统

双主题配置后,Expressive Code 输出的 CSS 变量跟随站点的深浅色模式自动切换,代码块颜色和站点主题始终一致,不需要 JS 参与:

expressiveCode({
  themes: ['one-dark-pro', 'one-light'],
  // 默认以第一个为暗色、第二个为亮色,跟随 CSS 变量切换
})

与普通 Markdown 代码块的关系

接入后不需要改任何旧文章——普通三反引号代码块自动升级为 Expressive Code 渲染(语法高亮质量随 Shiki,覆盖 200+ 语言)。meta 是可选增强,有则渲染高级特性,无则正常高亮。这是它作为「渲染引擎替换」的优雅之处:渐进增强,向后兼容。

实际效果对比

默认 Shiki/Prism 高亮 vs Expressive Code 的差异体感:

能力 默认代码块 Expressive Code
语法高亮 ✅ ✅(同 Shiki 内核)
行号 ❌ ✅ 可选
标题栏/文件名 ❌ ✅
行级标记 ❌ ✅ mark/ins/del
折叠长代码 ❌ ✅
复制按钮 看主题 ✅ 内置
多主题跟随 手动 ✅ 原生

小结

Expressive Code 的定位是「技术内容站代码块的全功能渲染层」:高亮内核用 Shiki(业界最好),在此之上补齐行号、行标记、折叠、标题栏这些内容表达特性,且全部通过 Markdown meta 驱动、零侵入向后兼容。本站接入它后,技术文章里讲源码、贴配置、做对比的表达力明显上了一个台阶。

Expressive Code 入门:代码块高亮的终极方案
http://www.clxhxhhr.top/posts/3722/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。