import { defineConfig } from 'vite'; import vituum from 'vituum'; import pug from '@vituum/vite-plugin-pug'; import twig from '@vituum/vite-plugin-twig'; import { resolve } from 'path'; import { glob } from 'glob'; import basicSsl from '@vitejs/plugin-basic-ssl'; // Автоматическое определение входных точек const getInputFiles = () => { const htmlFiles = glob.sync('src/pages/**/*.{html,pug,twig}'); const jsFiles = glob.sync('src/js/**/*.js'); const input = {}; // HTML/PUG/TWIG файлы htmlFiles.forEach(file => { const name = file .replace('src/pages/', '') .replace(/\.(html|pug|twig)$/, ''); input[name] = resolve(__dirname, file); }); // JS файлы jsFiles.forEach(file => { const name = file.replace('src/js/', '').replace('.js', ''); input[`js/${name}`] = resolve(__dirname, file); }); return input; }; export default defineConfig({ plugins: [ vituum({ pages: { dir: './src/pages' } }), // Поддержка Pug pug({ root: './src', options: { pretty: true, basedir: './src' } }), // Поддержка Twig twig({ root: './src', namespaces: { layouts: './src/layouts', components: './src/components', data: './src/data' } }), // HTTPS для разработки basicSsl() ], // Настройки сервера разработки server: { host: true, port: 3000, https: true, open: true }, // Настройки сборки build: { outDir: 'dist', assetsDir: 'assets', sourcemap: true, rollupOptions: { input: getInputFiles(), output: { chunkFileNames: 'assets/js/[name]-[hash].js', entryFileNames: 'assets/js/[name]-[hash].js', assetFileNames: assetInfo => { const info = assetInfo.name.split('.'); const ext = info[info.length - 1]; if (/\.(png|jpe?g|svg|gif|tiff|bmp|ico)$/i.test(assetInfo.name)) { return `assets/images/[name]-[hash].${ext}`; } if (/\.(woff2?|eot|ttf|otf)$/i.test(assetInfo.name)) { return `assets/fonts/[name]-[hash].${ext}`; } if (/\.css$/i.test(assetInfo.name)) { return `assets/css/[name]-[hash].${ext}`; } return `assets/[name]-[hash].${ext}`; } } }, // Минификация minify: 'terser', terserOptions: { compress: { drop_console: true, drop_debugger: true } } }, // Настройки CSS css: { preprocessorOptions: { scss: { additionalData: `@import "./src/styles/_vars.scss"; @import "./src/styles/_scss";` } }, devSourcemap: true }, // Алиасы путей resolve: { alias: { '@': resolve(__dirname, 'src'), '@styles': resolve(__dirname, 'src/styles'), '@js': resolve(__dirname, 'src/js'), '@images': resolve(__dirname, 'src/images'), '@components': resolve(__dirname, 'src/components'), '@layouts': resolve(__dirname, 'src/layouts'), '@data': resolve(__dirname, 'src/data') } } });