You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Astro项目中shikiji-transformers无法在MDX内容生效的问题

解决Astro中shikiji-transformers的TransformerNotationHighlight不生效问题

核心问题分析

你的配置存在两个关键问题:

  • MDX未单独配置shiki转换器:@astrojs/mdx会独立处理MDX文件的markdown规则,全局的markdown.shikiConfig不会自动继承到MDX的处理逻辑中。
  • 错误导入所有转换器:直接传递Object.values(transformers)会引入冗余甚至冲突的转换器,且TransformerNotationHighlight是工厂函数,需要调用生成实例才能生效。

修复步骤

1. 分别配置Markdown和MDX的shiki选项

修改Astro配置文件,给MDX集成单独设置与全局Markdown一致的shiki配置:

import { defineConfig } from "astro/config";
import mdx from "@astrojs/mdx";
import { TransformerNotationHighlight } from 'shikiji-transformers';

export default defineConfig({
  site: "https://www.sanderboer.nl/",
  prefetch: true,
  // 处理普通Markdown文件
  markdown: {
    syntaxHighlight: "shiki",
    shikiConfig: {
      transformers: [TransformerNotationHighlight()]
    },
  },
  integrations: [
    mdx({
      // 单独处理MDX文件的markdown规则
      markdown: {
        syntaxHighlight: "shiki",
        shikiConfig: {
          transformers: [TransformerNotationHighlight()]
        },
      }
    }),
  ],
});

2. 仅导入并初始化需要的转换器

不要一次性导入所有转换器,只引入TransformerNotationHighlight并调用它生成可用实例——这是很多新手容易忽略的点,该转换器并非直接可用的对象,必须通过函数调用初始化。

3. 验证代码块格式

确保你的代码块是在MDX/Markdown文件中,且注释格式严格符合要求:

export function foo() {
  console.log('Highlighted') // [!code highlight]
}

注意:注释必须为单行注释,[!code highlight]需紧跟在//后,无多余空格。

4. 版本兼容性确认

你的依赖版本是兼容的:Astro 4.x内置的shiki为v1.x版本,shikiji-transformers@0.10.2恰好适配该版本,无需调整依赖版本。

验证方式

修改配置后重启Astro开发服务器,通过浏览器开发者工具检查目标代码行,若成功生效,该行会被添加highlighted类名,同时呈现对应的高亮样式。

内容的提问来源于stack exchange,提问作者Xiduzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:02:05