Files
snippets/kcal/vite.config.ts
T

36 lines
1.7 KiB
TypeScript

/// <reference types="node" />
import { defineConfig } from 'vitest/config';
import vueJsxVapor from 'vue-jsx-vapor/vite';
import tailwindcss from '@tailwindcss/vite';
import { syncEnginePlugin } from 'vue-sync-engine/plugin';
// JSX компилируется сразу в Vapor-код (без interop и virtual DOM).
// Tailwind v4 подключён как Vite-плагин, конфиг живёт в src/app.css (@theme).
// syncEnginePlugin собирает дефы в virtual:sync-engine-registry — его требует
// DevTools-ветка движка в dev-режиме.
export default defineConfig({
plugins: [vueJsxVapor(), tailwindcss(), syncEnginePlugin({ definitions: ['/src/data/defs.ts'] })],
resolve: {
// vue-sync-engine подключён симлинком (link:), поэтому его импорты `vue`
// уходят в собственную vue из devDependencies движка. Без dedupe в бандл
// попадают две копии Vue и mount падает на чужом appContext.
dedupe: ['vue'],
},
optimizeDeps: {
// Движок ходит в virtual-модуль — пребандл прятал бы его от плагина.
exclude: ['vue-sync-engine'],
},
define: {
__VUE_OPTIONS_API__: 'false',
__VUE_PROD_DEVTOOLS__: 'false',
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false',
// Dev-ветки vue-sync-engine (DevTools-панель) остаются в `vite dev`,
// вырезаются из прод-сборки.
__SYNC_ENGINE_DEV__: JSON.stringify(process.env.NODE_ENV !== 'production'),
},
test: {
environment: 'node',
include: ['src/**/*.test.ts'],
},
});