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],