Перейти к основному содержанию

Vite

Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Использовать TypeORM в проекте Vite достаточно просто. Однако при работе с миграциями вы столкнётесь с ошибкой «...имя миграции неверное. Имя класса миграции должно содержать временную метку JavaScript» при сборке production-версии. В production-сборках файлы оптимизируются по умолчанию, что включает изменение идентификаторов кода для уменьшения размеров файлов.

Существует 3 способа решения этой проблемы. Все варианты представлены ниже в виде изменений относительно базовой конфигурации 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"),
},
},
})

Вариант 1: Отключение минификации

Наиболее грубый вариант, приводящий к значительному увеличению размера файлов. Добавьте 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: {

Вариант 2: Отключение изменения идентификаторов в 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: {

Вариант 3: Использование terser с сохранением имён классов миграций

Vite поддерживает использование terser в качестве минификатора. Terser работает медленнее esbuild, но предоставляет более детальный контроль над процессом минификации. Добавьте minify: 'terser' с опциями terserOptions.mangle.keep_classnames: /^Migrations\d+$/ и terserOptions.compress.keep_classnames: /^Migrations\d+$/ в конфигурацию. Эти опции гарантируют, что имена классов, начинающиеся с "Migrations" и заканчивающиеся цифрами, не будут переименованы при минификации.

Убедитесь, что terser установлен как dev-зависимость в проекте: 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: {