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 兼容性

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

转换器匹配算法

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

了解更多

其他破坏性变更

  • createdBundledHighlighter 需要一个单一的对象样式参数
  • @shikijs/core
    • 正则引擎 createJavaScriptRegexEnginecreateOnigurumaEngine 不再包含,分别从 @shikijs/engine-oniguruma@shikijs/engine-javascript 导入
    • @shikijs/core/wasm-inline@shikijs/engine-oniguruma/wasm-inline 替换
    • @shikijs/vscode-textmate 导入 FontStyleStackElementMetadata,而不是 @shikijs/core

作为用户尝试

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

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

然后运行工具查看是否发出任何警告。如果有,请向其对应的仓库报告,以提升对即将发生的变更的认识。如果没有,工具应能按预期与 Shiki v3.0.0 一起正常工作,此时您可以进一步迁移到 v3,如下所示:

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

反馈

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