迁移
我们建议您逐步迁移,按照每个版本的迁移指南进行操作。
从 v2.0 迁移
如果您在 v2.0 上且在使用中没有警告,您应该能够直接升级到 v3.0,详细信息请阅读 Shiki v3.0。
从 v1.0 迁移
我们建议您首先 迁移到 v2.0,然后再迁移到 v3.0。
从 v0.14 迁移
Shiki 的 v1.0 版本是一次重大的重写,我们利用这个机会重新审视了过去做出的每一个设计决策。我们最初有一个单独的包名 Shikiji 来实验新的设计,现在它已合并回 Shiki,成为 v1.0。
了解更多
有兴趣了解 v1.0 背后的故事吗?请查看这篇 博客文章 获取更多细节。
与 shiki@0.14.3 相比,破坏性变更的列表如下:
硬性破坏性变更
需要手动迁移的破坏性变更:
- CJS 和 IIFE 构建已被弃用。有关详细信息,请参见 CJS 使用 和 CDN 使用。
codeToHtml在内部使用hast。生成的 HTML 会稍有不同,但应该表现相同。- 不再支持
css-variables主题。请改用 双主题 方法,或在 主题颜色处理 页面了解更多信息。
软性破坏性变更
破坏性变更适用于主包 shiki,但通过 兼容构建 @shikijs/compat 进行了兼容处理:
- 顶层命名导出
setCDN、loadLanguage、loadTheme、setWasm已被弃用,因为不再需要。 BUNDLED_LANGUAGES、BUNDLED_THEMES已移至@shikijs/langs和@shikijs/themes,并分别重命名为bundledLanguages和bundledThemes。createHighlighter的theme选项已被弃用,请改为使用包含数组的themes。- Highlighter 不再维护内部默认主题上下文。
codeToHtml和codeToTokens需要theme选项。 codeToThemedTokens被重命名为codeToTokensBase,并添加了更高级别的codeToTokens。codeToTokens默认将includeExplanation设置为false。.ansiToHtml已作为特殊语言ansi合并到.codeToHtml中。请改用.codeToHtml(code, { lang: 'ansi' })。lineOptions已被弃用,取而代之的是完全可自定义的transforms选项。LanguageRegistration的grammar字段被扁平化为LanguageRegistration本身,更多详细信息请参阅类型定义。
生态系统包
shiki-twoslash已完全重写。它不再是 Shiki 高亮器的封装,而是一个 Shiki 转换器,可以集成到支持 Shiki 转换器的任何集成中。该包现在为@shikijs/twoslash。shiki-twoslash的集成,例如gatsby-remark-shiki-twoslash等,将慢慢迁移到通用的 Shiki 版本。在此之前,您可以使用@shikijs/rehype或@shikijs/markdown-it将 Shiki 集成到这些元框架中。- 引入了新的官方集成,如
@shikijs/monaco、@shikijs/cli、@shikijs/rehype、@shikijs/markdown-it。 - 由于使用率低,
shiki-renderer-path和shiki-renderer-svg包正在被弃用。如果需要这些包,请提交一个问题并指出您的使用案例,我们愿意考虑重新引入。 vuepress-plugin-shiki被弃用,因为 VuePress 不再推荐。它的继任者 VitePress 内置了 Shiki 集成。
从 Shikiji 迁移
如果您已经在使用 Shikiji,首先确保您使用的是最新的小版本 v0.10。然后通过重命名包,迁移将非常简单:
shikiji->shikishikiji-core->@shikijs/coreshikiji-twoslash->@shikijs/twoslashshikiji-transformers->@shikijs/transformersshikiji-monaco->@shikijs/monacoshikiji-cli->@shikijs/climarkdown-it-shikiji->@shikijs/markdown-itrehype-shikiji->@shikijs/rehype