templates/vitekit/__/vite-bem-template-main/vite.config.js
2026-04-12 21:03:18 +03:00

98 lines
2.3 KiB
JavaScript

import path, { resolve } from 'node:path'
import url from 'node:url'
import { defineConfig } from 'vite'
import viteMultipage from 'vite-plugin-multipage'
import vitePug from 'vite-plugin-pug-transformer'
import viteEslint from 'vite-plugin-eslint'
import viteStylelint from 'vite-plugin-stylelint'
import viteSassGlob from 'vite-plugin-sass-glob-import'
import viteImagemin from 'vite-plugin-imagemin'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
const root = resolve(path.dirname(url.fileURLToPath(import.meta.url)), 'src')
const outDir = resolve(path.dirname(url.fileURLToPath(import.meta.url)), 'dist')
export default defineConfig({
root,
base: './',
clearScreen: false,
build: {
outDir,
emptyOutDir: true,
minify: 'terser',
chunkSizeWarningLimit: '1024',
assetsInlineLimit: 0,
rollupOptions: {
output: {
assetFileNames: (assetInfo) => {
let extType = assetInfo.name.split('.')[1]
if (/png|jpe?g|svg|gif|tiff|bmp|ico/i.test(extType)) {
extType = 'images'
} else if (extType === 'css') {
extType = 'styles'
}
return `${extType}/[name][extname]`
},
chunkFileNames: 'scripts/scripts.js'
}
}
},
css: {
preprocessorOptions: {
scss: {
silenceDeprecations: ['legacy-js-api', 'import']
}
}
},
plugins: [
viteMultipage({
mimeCheck: true,
open: '/',
pageDir: 'pages',
purgeDir: 'pages',
removePageDirs: true,
rootPage: 'index.html'
}),
vitePug({
pugOptions: {
pretty: true
}
}),
viteEslint({
failOnError: false
}),
viteStylelint(),
viteSassGlob(),
viteImagemin({
gifsicle: {
optimizationLevel: 7,
interlaced: false
},
mozjpeg: {
quality: 75
},
pngquant: {
quality: [0.7, 0.7],
speed: 4
},
svgo: {
plugins: [
{
name: 'removeViewBox'
},
{
name: 'removeEmptyAttrs',
active: false
}
]
}
}),
createSvgIconsPlugin({
iconDirs: [resolve(process.cwd(), 'src/images')],
symbolId: '[name]',
inject: 'body-last',
customDomId: '__svg__icons__dom__'
})
]
})