134 lines
3.2 KiB
JavaScript
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')
|
|
}
|
|
}
|
|
});
|