diff --git a/package.json b/package.json index 9be6b26..5a8c0d9 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,20 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build", + "build": "vite build --minify false --mode build", + "prod": "vite build --minify true --mode prod", "watch": "vite build --watch", "preview": "vite preview" }, "devDependencies": { - "glob": "^10.3.10", + "glob": "^10.3.3", "sass": "^1.64.1", "vite": "^4.4.5", "vite-plugin-full-reload": "^1.0.5", + "vite-plugin-html-minifier": "^1.0.3", "vite-plugin-nunjucks": "^0.1.10" + }, + "dependencies": { + "swiper": "^10.1.0" } -} +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index 386ec22..d318d4a 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,3 +1,5 @@ +import { defineConfig } from 'vite' + // Импорт Nunjucks import nunjucks from 'vite-plugin-nunjucks' @@ -9,9 +11,12 @@ import { fileURLToPath } from 'node:url' // Импорт модуля для обновления страницы в браузере (используется только для файлов "*.njk", но это можно настроить) import FullReload from 'vite-plugin-full-reload' +// Импорт модуля для минификации html кода при prod-сборке +import htmlMinifier from 'vite-plugin-html-minifier' + // Генерация объекта со всеми страницами проекта в виде { 'имя/страницы': '/полный/путь/к/файлу.html', ... } -const pages = Object.fromEntries(glob.sync("app/**/*.html", {ignore: "app/{cmp,inc}/**/*.html"}).map(file => [ +const pages = Object.fromEntries(glob.sync("app/**/*.html").map(file => [ path.relative( 'app', file.slice(0, file.length - path.extname(file).length) @@ -21,27 +26,44 @@ const pages = Object.fromEntries(glob.sync("app/**/*.html", {ignore: "app/{cmp,i console.log(pages) -export default { - root: "app", // назначаем корневую директорию проекта +// Фильтры +const formatMoney = (val) => { // получает int(1234567), возвращает str(1 234 567) + let result = "" + let v = val.toString() + for (let i = 0; i < v.length; i++) { + if (i % 3 === 0 && i !== 0) + result = `${v[v.length-1 - i]} ` + result + else + result = v[v.length-1 - i] + result + } + + return result +} + - clearScreen: false, // отключаем очистку консоли при запуске сервера +export default defineConfig((command) => { + const global = { + root: "app", // назначаем корневую директорию проекта + + clearScreen: false, // отключаем очистку консоли при запуске сервера + } // настройки для dev сервера - server: { + const server = { open: true, // при запуске открываем страницу в браузере host: true, // создаём хост для подключения из локальной сети port: 8080, - }, + } // настройки для preview сервера - preview: { + const preview = { open: true, // при запуске открываем страницу в браузере host: true, // создаём хост для подключения из локальной сети port: 8081, - }, + } // настройки для сборщика - build: { + const build = { cssCodeSplit: false, // отключаем разделение стилей по разным файлам outDir: "../dist", // задаём папку для сборки @@ -49,13 +71,35 @@ export default { rollupOptions: { input: pages // передаём все страницы проекта для сборщика - } - }, + }, + } // настройки плагинов - plugins: [ - nunjucks.default(), // активация Nunjucks - FullReload(['config/routes.rb', 'app/**/*'], {always: true}) // автоматическое обновление страницы при изменении файлов - ], -} + const plugins = [ + // активация Nunjucks + nunjucks.default({ + nunjucksEnvironment: { + filters: { + formatMoney: formatMoney + } + } + }), + + // автоматическое обновление страницы при изменении любых файлов + FullReload(['config/routes.rb', 'app/**/*'], {always: true}), + + // Минификация html при prod-сборке + htmlMinifier({ + minify: command.mode == "prod", + }), + ] + + return { + ...global, + server, + preview, + build, + plugins + } +}) \ No newline at end of file