fix(export): Shiki 语言包改字面量动态导入,修复打包警告与加载风险
This commit is contained in:
@@ -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<import('shiki').HighlighterCore> {
|
||||
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],
|
||||
|
||||
Reference in New Issue
Block a user