Vite
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
在 Vite 项目中使用 TypeORM 非常简单直接。但当你使用迁移功能时,在生产环境构建过程中会遇到"...迁移名称错误。迁移类名应附加 JavaScript 时间戳"的错误提示。 这是因为生产构建会默认进行代码优化,包括混淆代码以减小文件体积。
有三种解决方案可以避免此问题。以下三种选项均基于这个基础 vite.config.ts 文件的修改差异展示。
import legacy from "@vitejs/plugin-legacy"
import vue from "@vitejs/plugin-vue"
import path from "path"
import { defineConfig } from "vite"
// https://vitejs.dev/config/
export default defineConfig({
build: {
sourcemap: true,
},
plugins: [vue(), legacy()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
})
选项一:禁用压缩
禁用压缩是最粗糙的选项,会导致文件明显变大。请在你的配置中添加 build.minify = false。
--- basic vite.config.ts
+++ disable minify vite.config.ts
@@ -7,6 +7,7 @@
export default defineConfig({
build: {
sourcemap: true,
+ minify: false,
},
plugins: [vue(), legacy()],
resolve: {
选项二:禁用 esbuild 的标识符压缩
Vite 默认使用 esbuild 进行压缩。添加 esbuild.minifyIdentifiers = false 可禁用标识符混淆。这样能在保持较小文件体积的同时保留标识符原名(根据代码库情况,文件体积会因保留完整标识符而增加)。
--- basic vite.config.ts
+++ disable esbuild minify identifiers vite.config.ts
@@ -8,6 +8,7 @@
build: {
sourcemap: true,
},
+ esbuild: { minifyIdentifiers: false },
plugins: [vue(), legacy()],
resolve: {
选项三:使用 terser 作为压缩工具并仅保留迁移类名
Vite 支持使用 terser 作为压缩工具。Terser 虽然比 esbuild 慢,但提供更精细的压缩控制。
在配置中添加 minify: 'terser' 并设置 terserOptions.mangle.keep_classnames: /^Migrations\d+$/ 和 terserOptions.compress.keep_classnames: /^Migrations\d+$/。
这些选项将确保以 "Migrations" 开头并以数字结尾的类名在压缩过程中不会被重命名。
请确保项目中已安装 terser 作为开发依赖:npm add -D terser。
--- basic vite.config.ts
+++ terser keep migration class names vite.config.ts
@@ -7,6 +7,11 @@
export default defineConfig({
build: {
sourcemap: true,
+ minify: 'terser',
+ terserOptions: {
+ mangle: { keep_classnames: /^Migrations\d+$/ },
+ compress: { keep_classnames: /^Migrations\d+$/ },
+ },
},
plugins: [vue(), legacy()],
resolve: {