From 090c9e665ba80d5ad8f07837941d3dca3df030a3 Mon Sep 17 00:00:00 2001 From: shaw Date: Mon, 5 Jan 2026 09:32:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E5=90=AF=E7=94=A8=20vue-i18n?= =?UTF-8?q?=20JIT=20=E7=BC=96=E8=AF=91=E4=BF=AE=E5=A4=8D=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8F=92=E5=80=BC=E4=B8=8D=E5=B7=A5=E4=BD=9C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:使用 vue-i18n 运行时版本后,带变量的翻译(如 '{days} 天') 无法正确显示,直接显示原始字符串。 原因:运行时版本不含消息编译器,无法在运行时编译消息插值。 解决:启用 JIT 编译(__INTLIFY_JIT_COMPILATION__: true) - JIT 编译器将消息编译为 AST 对象而非 JavaScript 代码 - 通过解释执行 AST 实现插值,无需 eval 或 new Function - 符合 CSP script-src 'self' 策略,不降低安全性 同时将 vite.config.js.timestamp-* 临时文件添加到 .gitignore --- .gitignore | 1 + frontend/vite.config.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index b5d9e80d..d7ec87e4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ frontend/dist/ *.local *.tsbuildinfo vite.config.d.ts +vite.config.js.timestamp-* # 日志 npm-debug.log* diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 58606674..002221e6 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -18,6 +18,11 @@ export default defineConfig({ 'vue-i18n': 'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js' } }, + define: { + // 启用 vue-i18n JIT 编译,在 CSP 环境下处理消息插值 + // JIT 编译器生成 AST 对象而非 JS 代码,无需 unsafe-eval + __INTLIFY_JIT_COMPILATION__: true + }, build: { outDir: '../backend/internal/web/dist', emptyOutDir: true