Skip to content

Shiki v3.0.0

Shiki v3.0.0 是一个平淡无奇的版本(与前一个版本相比),它移除了自 v1.x 版本起已标记为弃用,并在 v2.x 版本中明确警告的 API。

在 Shiki 中,新功能会逐步在小版本中发布,而主版本则用于清理和删除弃用的 API。

如果你仍在使用 v1.x 版本,请先迁移到 v2.x 版本。它应该为你提供一个平滑的过渡到 v3.0.0 的路径。

破坏性变更

  • v1.x: 弃用的 API 仍然受支持,仅在类型层面标记。可以选择启用运行时警告。
  • v2.0: 没有破坏性变更,但默认启用运行时弃用警告。
  • 👉 v3.0: 移除弃用的 API,破坏性变更。

getHighlighter -> createHighlighter

没有功能上的变化,更像是修正了命名,以避免混淆。这应该是一个简单的查找和替换。

WASM 相关 API

自从 v1.16 版本引入引擎系统以来,与 WebAssembly 相关的依赖不再是硬性要求。为了方便 tree-shaking 并将引擎与核心解耦,我们提取了两个包:@shikijs/engine-oniguruma@shikijs/engine-javascript。它们也从主包中重新导出,分别为 shiki/engine/onigurumashiki/engine/javascript

你可能需要更改你的导入路径:

ts
import { loadWasm } from 'shiki'
import { loadWasm } from 'shiki/engine/oniguruma'

createHighlighterCore 中的 loadWasm 字段被替换为 engine 字段:

ts
import { createHighlighter } from 'shiki'
import { createOnigurumaEngine } from 'shiki/engine/oniguruma'
const shiki = await createHighlighter({
  // ...
  loadWasm: () => import('shiki/wasm'), 
  engine: createOnigurumaEngine(() => import('shiki/wasm')), 
})

同时,@shikijs/core 包不再包含引擎或 wasm 二进制文件。你需要从 @shikijs/engine-oniguruma@shikijs/engine-javascript 包中导入它们。

Shiki Compat

为兼容 v0.14 而构建的 @shikijs/compat 包现已停止维护。请迁移到主包。

转换器匹配算法

转换器的 matchAlgorithm 选项在 v1.29.0 中引入,允许用户选择匹配算法。v3.0.0 中,默认值从 v1 更改为 v3

了解更多

其他破坏性变更

  • createdBundledHighlighter 需要一个单一的对象风格参数。
  • @shikijs/core
    • 正则表达式引擎 createJavaScriptRegexEngine createOnigurumaEngine 不再包含,请分别从 @shikijs/engine-oniguruma@shikijs/engine-javascript 导入它们。
    • @shikijs/core/wasm-inline@shikijs/engine-oniguruma/wasm-inline 替换。
    • @shikijs/vscode-textmate 而不是 @shikijs/core 导入 FontStyleStackElementMetadata

用户试用

如果你间接通过其他包(例如 vitepress@nuxt/content)使用 Shiki,而你无法直接控制 Shiki 的版本,则可以尝试在你的 package.json 中添加以下行,以强制使用 Shiki v2.0.0

json
{
  "resolutions": {
    "shiki": "^2",
    "@shikijs/core": "^2",
    "@shikijs/transformers": "^2",
    "@shikijs/markdown-it": "^2",
    "@shikijs/rehype": "^2"
  }
}

然后运行该工具,看看是否发出任何警告。如果发出警告,请将其报告给它们的仓库,以引起人们对即将到来的更改的注意。如果没有,则该工具应该与 Shiki v3.0.0 一起按预期工作,你可以进一步迁移到 v3,如下所示:

json
{
  "resolutions": {
    "shiki": "^3",
    "@shikijs/core": "^3",
    "@shikijs/transformers": "^3",
    "@shikijs/markdown-it": "^3",
    "@shikijs/rehype": "^3"
  }
}

反馈

欢迎任何反馈!请随时在 GitHub 上提出 issue,让我们知道你的想法。

以 MIT 许可证发布