За эти 2 часа в сборку добавил:
1️⃣ CSS modules
2️⃣ Роутинг
3️⃣ Ленивые чанки
4️⃣ Размер бандла
5️⃣ Bundle analyzer
Сборка почти готова 🧑💻🚀
1️⃣ CSS modules
2️⃣ Роутинг
3️⃣ Ленивые чанки
4️⃣ Размер бандла
5️⃣ Bundle analyzer
Сборка почти готова 🧑💻🚀
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Что сделано:
1️⃣ Настроил роутеры во Vue, теперь переключение между страницами происходит без перезагрузки , контент генерируется динамически.
2️⃣ Добавил роутеры только для 2-х страниц, для других добавлю позже.
1️⃣ Настроил роутеры во Vue, теперь переключение между страницами происходит без перезагрузки , контент генерируется динамически.
2️⃣ Добавил роутеры только для 2-х страниц, для других добавлю позже.
❤2🔥1
Сегодня применил Vuex на практике:
🔹 Вынес данные ссылок и навигации из локального data() компонентов в глобальный state.
🔹 Настроил доступ к ним через getters.
Теперь вся структура ссылок лежит в одном месте. Код компонентов стал чище, а масштабировать меню теперь намного проще — поправил в store, и всё обновилось везде.
Шаг за шагом к чистому и структурированному коду 🚀
🔹 Вынес данные ссылок и навигации из локального data() компонентов в глобальный state.
🔹 Настроил доступ к ним через getters.
Теперь вся структура ссылок лежит в одном месте. Код компонентов стал чище, а масштабировать меню теперь намного проще — поправил в store, и всё обновилось везде.
Шаг за шагом к чистому и структурированному коду 🚀
❤1
🚀 Переношу проект на Vue 3!
Решил отрефакторить свой старый проект и переписать его на Vue.
Что уже сделал:
Разбил верстку на компоненты (
Вынес данные участников в реактивный массив
Передал данные через
Подключил Роутеры.
Пока храню данные прямо в компоненте, позже планирую вынести всё в Pinia, чтобы сделать архитектуру ещё чище.
Решил отрефакторить свой старый проект и переписать его на Vue.
Что уже сделал:
Разбил верстку на компоненты (
TeamCard и Navbar).Вынес данные участников в реактивный массив
ref() и вывел карточки через v-for.Передал данные через
props в дочерний компонент.Подключил Роутеры.
Пока храню данные прямо в компоненте, позже планирую вынести всё в Pinia, чтобы сделать архитектуру ещё чище.
🚀 Переписал старый Bootstrap-проект на Vue 3!
Полноценно перевёл сайт в SPA всего за 2 часа. Это моё первое самостоятельное веб-приложение на Vue!
Что сделал в процессе:
Разбил верстку на независимые компоненты.
Настроил Vue Router с динамическим импортом страниц (lazy loading).
Реализовал передачу данных через
Следующий шаг вынести хранение данных из компонентов в Pinia.
Двигаемся дальше по плану! 💻🔥
Полноценно перевёл сайт в SPA всего за 2 часа. Это моё первое самостоятельное веб-приложение на Vue!
Что сделал в процессе:
Разбил верстку на независимые компоненты.
Настроил Vue Router с динамическим импортом страниц (lazy loading).
Реализовал передачу данных через
defineProps и директивы (v-for, :src, :class).Следующий шаг вынести хранение данных из компонентов в Pinia.
Двигаемся дальше по плану! 💻🔥
🔥 Сделал документацию для своей Gulp-сборки!
Написал подробную и понятную инструкцию по использованию моей Gulp сборки прямо в
Что умеет сборка:
⚡️ Автоматическая компиляция SCSS в CSS и автопрефиксы
🖼 Сжатие и конвертация изображений в WebP/JPG
🔤 Быстрая конвертация TTF-шрифтов в WOFF/WOFF2 в одну команду
🧩 HTML-инклюды для удобной модульной верстки
🎯 Автоматическая генерация SVG-спрайтов с визуальной шпаргалкой
🔄 Локальный сервер с автообновлением страницы (BrowserSync)
Зайти, посмотреть структуру, протестировать под свои проекты и оценить
Буду рад вашему фидбеку и звездочкам на репо! ⭐️ В скором времени сниму видеоразбор по этой сборке на YouTube.
Написал подробную и понятную инструкцию по использованию моей Gulp сборки прямо в
README.md на GitHub.Что умеет сборка:
⚡️ Автоматическая компиляция SCSS в CSS и автопрефиксы
🖼 Сжатие и конвертация изображений в WebP/JPG
🔤 Быстрая конвертация TTF-шрифтов в WOFF/WOFF2 в одну команду
🧩 HTML-инклюды для удобной модульной верстки
🎯 Автоматическая генерация SVG-спрайтов с визуальной шпаргалкой
🔄 Локальный сервер с автообновлением страницы (BrowserSync)
Зайти, посмотреть структуру, протестировать под свои проекты и оценить
README можно по ссылке: 👉 здесьБуду рад вашему фидбеку и звездочкам на репо! ⭐️ В скором времени сниму видеоразбор по этой сборке на YouTube.
Август всё! Вся база закрыта 💪
По планам на август закрыл вообще всё, что задумывал. Месяц выжал на максимум!
Под конец решил закрыть ещё одну мелкую, но частую рутину — написал пару лёгких
Дальше — сентябрь и новые задачи. Всех с наступающим! 🔥
По планам на август закрыл вообще всё, что задумывал. Месяц выжал на максимум!
Под конец решил закрыть ещё одну мелкую, но частую рутину — написал пару лёгких
.bat скриптов для автоматизации. Теперь не нужно руками прописывать одни и те же команды в консоли: запустил батник, и он сам всё делает и пушит на GitHub. Мелочь, а время и нервы экономят знатно.Дальше — сентябрь и новые задачи. Всех с наступающим! 🔥
🔥1
Перевожу проект с JS на TS. Наконец-то нормальный автокомплит в шаблонах Vue и никаких гаданий по поводу структуры данных.
Паттерн Assert Exhaustiveness в TypeScript: заставляем TS искать баги за нас
Представь: у тебя есть union-тип статусов заказа или валют, и ты обрабатываешь их через
Чтобы этого избежать, используется паттерн Assert Exhaustiveness:
Представь: у тебя есть union-тип статусов заказа или валют, и ты обрабатываешь их через
if или switch. Что произойдет, если через полгода в проект добавят новый статус, а ты забудешь добавить его обработку в функцию? Код тихо вернет undefined и сломает интерфейс.Чтобы этого избежать, используется паттерн Assert Exhaustiveness:
type Currency = 'RUB' | 'USD' | 'EUR' // Добавили EUR
// Вспомогательная функция для проверки исчерпываемости
// "value: never" работает в редакторе , и подсвечивает ошибку, если не обработали вариант
function assertExhaustiveness(value: never): never {
// Работает на сервере
throw new Error(`Необработанный вариант: ${JSON.stringify(value)}`);
}
function getCurrencyChar(currency: Currency) {
if (currency === 'RUB') return '₽';
if (currency === 'USD') return '$';
// ТУТ TS ВЫДАСТ ОШИБКУ КОМПИЛЯЦИИ:
// Argument of type 'string' (EUR) is not assignable to parameter of type 'never'.
// TS буквально заставляет тебя написать еще один if для 'EUR'!
// Если все варианты обработаны, сюды доходит только 'never'
return assertExhaustiveness(currency)
}
❤1