templates/vite-templates/.lite/vite.config.js
2026-04-12 21:03:18 +03:00

134 lines
3.2 KiB
JavaScript

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')
}
}
});