Создание проекта с нуля: TypeScript + Jest + Sass + ESLint
Начинать новый проект — наверное, одно из самых скучных дел, когда у тебя уже есть идеи и задачи для реализации. И в течение последних нескольких лет стандартным инструментом для сборки был webpack.
Но время меняется, и теперь у нас, наверное, новая звезда — Вите.
Vite — это интерфейсный инструмент сборки, разработанный Эваном Ю. Это тот самый Эван Ю, который разработал фреймворк Vue и вывел на рынок Anguar и React.
У меня уже есть руководство (которое я регулярно обновляю) о том, как начать проект с помощью Webpack, используя основные современные инструменты:
- Машинопись
- Препроцессор CSS (например, sass)
- ESLint как линтер кода
- Jest как среда модульного тестирования
Сегодня мы сделаем то же самое, но с помощью Vite. И я уже хочу сказать — это невероятно. Это как перейти с настройки Karma+Mocka+Chai на Jest. Кривая обучения минимальна.
Инициировать проект
Теперь нам даже не нужно создавать папку. Vite имеет несколько исходных шаблонов, которые можно установить с помощью одной команды:
# For npm 7+, extra double-dash is needed: npm create vite@latest project-name -- --template vanilla-ts # For npm 6.x npm create vite@latest project-name --template vanilla-ts
Как видите, я выбираю vanilla-ts, но есть масса готовых шаблонов для популярных фреймворков: vanilla
, vanilla-ts
, vue
, vue-ts
, react
, react-ts
, react-swc
, react-swc-ts
, preact
, preact-ts
, lit
, lit-ts
, svelte
, svelte-ts
.
Этот шаблон уже достаточно хорош для создания простого проекта MVP.
Вы уже можете запустить npm i
, а затем запустить сервер разработки (npm run dev
) или создать рабочий пакет (npm run build
).
Шаблон vanilla-ts может понимать HTML, TypeScript и CSS. Более того, он уже настроен на использование любых активов. Вы можете импортировать текст или значки в свой компонент или просто поместить что-нибудь в папку public
, и все внутри этой папки будет доступно из корня /path_to_your_file.format
.
Но давайте добавим препроцессор CSS, ESLint и модульные тесты.
Препроцессор CSS (sass, scss)
Vite ориентирован на современные браузеры, поэтому они рекомендуют использовать современный CSS с переменными CSS и плагинами PostCSS, такими как postcss-nesting.
Но он также поддерживает все современные препроцессоры CSS: .scss
, .sass
, .less
, .styl
. Чтобы включить любой из них, нужно выполнить соответствующую команду.
# .scss and .sass npm add -D sass # .less npm add -D less # .styl and .stylus npm add -D stylus
Вот и все! Все настроено, переименуйте существующий .css файл в .scss или любой другой формат, и он правильно его разберет.
Таким образом, TypeScript, HTML, CSS, активы и препроцессоры работают в Vite «из коробки».
Теперь ESLint и модульные тесты.
ESLint
Есть два способа, насколько глубоко вы хотите интегрировать ESLint. Во-первых, это простая инициализация конфигурации с помощью npm init @eslint/config
в зависимости от вашей IDE. И второе — интеграция в процесс сборки Vite.
Чтобы интегрировать ESLint в Vite, вы можете использовать сторонний плагин Vite-plugin-eslint.
npm install eslint vite-plugin-eslint --save-dev
Теперь нам нужно добавить пользовательскую конфигурацию. Для пользовательской конфигурации Vite вы должны создать файл конфигурации vite.config.js
, как в веб-пакете, но это будет намного проще.
И поставить туда:
import { defineConfig } from 'vite' import eslint from 'vite-plugin-eslint' export default defineConfig({ plugins: [eslint()] })
Кроме того, нам все еще нужно создать .eslintrc
. Это должен быть простой объект вместо экспорта ESM.
{ "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/no-non-null-assertion": "off" }, "env": { "browser": true, "amd": true }, "root": true }
Я добавил @typescript-eslint/no-non-null-assertion
rule, так как Vite обычно использует !.
ненулевой оператор утверждения.
ESLint настроен. Давайте перейдем к последнему шагу и настроим модульные тесты.
Шутка
Для меня Jest по-прежнему остается лучшим фреймворком для модульных тестов, и одним из его преимуществ является простота настройки.
Во-первых, вам нужно установить его и его типы, потому что мы используем TypeScript.
npm install --save-dev jest ts-jest @types/jest jest-environment-jsdom
Затем запустите файл конфигурации:
npx ts-jest config:init
И изменение сгенерировало jest.config.js
немного.
/** @type {import('ts-jest').JestConfigWithTsJest} */ export default { preset: 'ts-jest', testEnvironment: 'jsdom' };
Я изменил среду на jsdom, чтобы иметь возможность использовать элементы DOM внутри модульных тестов. Вот пример файла модульного теста /spec/counter.spec.ts
, который я создал для единственной функции, которая идет со сгенерированным шаблоном:
import { setupCounter } from '../src/counter'; describe('Setup counter button', function () { let el: HTMLButtonElement; beforeEach(() => { el = document.createElement('button'); }); it('Should setup counter event', function () { setupCounter(el); el.click(); expect(el.innerHTML).toBe('count is 1'); }); });
Далее, конечно, мы можем добавить команду jest в package.json.
"scripts": { "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", "test": "npx jest" }
Мы сделали!
Заключение
Настройка общего проекта Vite может занять примерно 1 минуту, если вас устраивает его богатая функциональность из коробки. Дополнительные настройки, такие как препроцессоры, линтер и модульные тесты, могут занять дополнительные 5 минут вашего дня 😅.
Спасибо за чтение, и хорошего дня!
Если вы не являетесь участником Medium и хотели бы поддержать меня, вы можете сделать это, перейдя по этой ссылке. Членство в Medium позволит вам читать мои посты и посты других людей на Medium. Еще раз спасибо за вашу поддержку!
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.