createShikiPlugin()

Tạo plugin syntax highlighting được hỗ trợ bởi Shiki. Một hàm async khởi tạo Shiki highlighter và trả về một UnifastPlugin với phép biến đổi HAST.

import { createShikiPlugin } from "@unifast/shiki";

Chữ ký

async function createShikiPlugin(
  options?: ShikiTransformerOptions,
): Promise<UnifastPlugin>

Tham số

options?

Cấu hình Shiki (theme, ngôn ngữ)

Thuộc tínhKiểuMặc địnhMô tả
themesBundledTheme[]["github-dark"]Các theme Shiki cần load
defaultThemeBundledThemeTheme đầu tiên trong themesTheme mặc định để render
langsBundledLanguage[][]Các ngôn ngữ cần load. Chỉ những ngôn ngữ đã load mới được highlight.

Cách dùng

import { compile } from "@unifast/node";
import { createShikiPlugin } from "@unifast/shiki";

const shiki = await createShikiPlugin({
  themes: ["github-dark", "github-light"],
  defaultTheme: "github-dark",
  langs: ["typescript", "rust", "json", "html", "css"],
});

const result = compile(md, {
  plugins: [shiki],
});

console.log(result.output);
// Code blocks are highlighted with Shiki-generated <span> elements

Ví dụ

Một theme duy nhất

import { compile } from "@unifast/node";
import { createShikiPlugin } from "@unifast/shiki";

const shiki = await createShikiPlugin({
  themes: ["github-dark"],
  langs: ["typescript"],
});

const result = compile("```ts\nconst x = 1;\n```", {
  plugins: [shiki],
});

console.log(result.output);
// <pre> with Shiki-highlighted <span> elements

Nhiều theme

import { createShikiPlugin } from "@unifast/shiki";

const shiki = await createShikiPlugin({
  themes: ["github-dark", "github-light", "dracula"],
  defaultTheme: "github-dark",
  langs: ["typescript", "rust", "python"],
});

// Use with compile() — defaultTheme is applied to code blocks

Kết hợp với các plugin khác

import { compile, gfm, frontmatter } from "@unifast/node";
import { createShikiPlugin } from "@unifast/shiki";

const shiki = await createShikiPlugin({
  themes: ["github-dark"],
  langs: ["typescript"],
});

const result = compile(md, {
  plugins: [gfm(), frontmatter(), shiki],
});