From 9113bea007226ac14e775aadc0c415184c9a1872 Mon Sep 17 00:00:00 2001 From: xieyinlu <1228890977@qq.com> Date: Sat, 14 Nov 2026 12:34:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(export):=20Shiki=20=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=8C=85=E6=94=B9=E5=AD=97=E9=9D=A2=E9=87=8F=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E4=B8=8E=E5=8A=A0=E8=BD=BD=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/exportHtml.ts | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/services/exportHtml.ts b/src/services/exportHtml.ts index eacaad4..900e698 100644 --- a/src/services/exportHtml.ts +++ b/src/services/exportHtml.ts @@ -243,6 +243,34 @@ const EXPORT_LANGS = [ 'csharp', 'sql', 'yaml', 'xml', 'diff', 'ini', ] as const +/** 每个语言用字面量 import 声明:模板拼接的 import(`.../${name}`) Vite 无法分析, + * 打包后会原样保留裸模块说明符导致高亮加载失败;字面量写法可正常分块、按需加载。 */ +const LANG_LOADERS: Record<(typeof EXPORT_LANGS)[number], () => Promise<{ default: import('@shikijs/types').LanguageRegistration[] }>> = { + javascript: () => import('@shikijs/langs/javascript'), + typescript: () => import('@shikijs/langs/typescript'), + tsx: () => import('@shikijs/langs/tsx'), + jsx: () => import('@shikijs/langs/jsx'), + json: () => import('@shikijs/langs/json'), + html: () => import('@shikijs/langs/html'), + css: () => import('@shikijs/langs/css'), + markdown: () => import('@shikijs/langs/markdown'), + bash: () => import('@shikijs/langs/bash'), + shell: () => import('@shikijs/langs/shell'), + powershell: () => import('@shikijs/langs/powershell'), + python: () => import('@shikijs/langs/python'), + java: () => import('@shikijs/langs/java'), + go: () => import('@shikijs/langs/go'), + rust: () => import('@shikijs/langs/rust'), + c: () => import('@shikijs/langs/c'), + cpp: () => import('@shikijs/langs/cpp'), + csharp: () => import('@shikijs/langs/csharp'), + sql: () => import('@shikijs/langs/sql'), + yaml: () => import('@shikijs/langs/yaml'), + xml: () => import('@shikijs/langs/xml'), + diff: () => import('@shikijs/langs/diff'), + ini: () => import('@shikijs/langs/ini'), +} + /** * Shiki 高亮器:用 core + JavaScript 正则引擎(不用 Oniguruma WASM—— * WASM 加载依赖 fetch/stream,在部分 WebView/测试环境会失败,JS 引擎 everywhere 可用)。 @@ -254,7 +282,7 @@ function loadHighlighter(): Promise { const { createJavaScriptRegexEngine } = await import('shiki/engine/javascript') const theme = (await import('@shikijs/themes/github-light')).default const langs = await Promise.all( - EXPORT_LANGS.map(async (name) => (await import(`@shikijs/langs/${name}`)).default), + EXPORT_LANGS.map(async (name) => (await LANG_LOADERS[name]()).default), ) return createHighlighterCore({ themes: [theme],