| Vue: создание приложения на TypeScript |
|
| Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Создание приложения TypeScript обычно начинается командой: npm create vue@latest В ответ на запрос "Project name (target directory):" введите имя проекта. Будет создана папка с таким именем для проекта. В ответ на запрос "Select features to include in your project:" выберите пункты "TypeScript", "Linter" и обычно также выбирают "Router". При создании TypeScript-проекта командой npm create vue@latest визард предлагает выбрать несколько функциональных возможностей для проекта: Select features to include in your project: (↑/↓ to navigate, space to select, a to toggle all, enter to confirm) │ ◻ TypeScript │ ◻ JSX Support │ ◻ Router (SPA development) │ ◻ Pinia (state management) │ ◻ Vitest (unit testing) │ ◻ End-to-End Testing │ ◻ Linter (error prevention) │ ◻ Prettier (code formatting) Зачем нужна каждая из этих фич? Вот подробный обзор каждой опции, которая появляется при создании нового проекта Vue с помощью `npm create vue@latest`: [TypeScript] Добавляет поддержку статической типизации. ● Позволяет писать код с типами (`:string`, `:number`, интерфейсы и т.д.). [JSX Support] Позволяет использовать синтаксис JSX/TSX. ● JSX — это расширение JavaScript, которое позволяет писать HTML-подобный код прямо в JavaScript/TypeScript файлах (обычно используется в React). Во Vue он нужен, в основном, если вы пишете функциональные компоненты или используете библиотеки, завязанные на рендер-функции. Обычно в Vue используют шаблоны (Template API) — это стандарт. JSX выбирают разработчики, пришедшие из React, или для более сложных случаев, когда нужно смешивать логику и разметку в одном файле с гибкостью JavaScript. [Router (SPA development)] Официальный маршрутизатор для Vue.js (Vue Router). Если вы делаете Single Page Application (SPA), вам нужно менять содержимое страницы без перезагрузки браузера (менять URL и показывать разные страницы/компоненты). Роутер позволяет связывать URL-адреса с конкретными компонентами Vue. Без него: у вас будет одна страница. С ним — многостраничное приложение с навигацией. [Pinia (state management)] Управление глобальным состоянием приложения. ● Хранилище данных, доступное из любого компонента, даже если они не связаны напрямую (родитель-потомок). [Vitest (unit testing)] Фреймворк для модульного (unit) тестирования. ● Позволяет писать тесты, которые проверяют работу отдельных функций, компонентов или модулей в изоляции друг от друга. [End-to-End Testing] Сквозное тестирование (E2E). ● Тестирование приложения целиком, имитирующее действия реального пользователя в браузере (клики, заполнение форм, переходы по страницам). [Linter (error prevention)] Инструмент для анализа кода (ESLint). ● Линтер проверяет код на соответствие правилам. Он находит потенциальные ошибки (например, использование переменной до её объявления) и следит за стилем кода (например, требуя точки с запятой или отступы). [Prettier (code formatting)] Автоматический форматировщик кода. ● Суть: Prettier «переписывает» ваш код, приводя его к единому, заданному стилю (длина строки, кавычки, запятые и т.д.). После завершения создания приложения зайдите в созданный каталог: cd имя_приложения Вам будут доступны команды [2]: npm install 1. npm install Устанавливает зависимости проекта. Технически: читает файл package.json, находит там список всех необходимых пакетов (библиотек) и загружает их из интернета в папку node_modules. Это первая команда, которую нужно запустить после клонирования проекта или скачивания исходников. Без неё проект не запустится, так как в репозиторий папка `node_modules` обычно не включается (она слишком тяжелая). В результате появляется папка node_modules и файл package-lock.json (фиксирует точные версии). 2. npm run format Запускает автоматическое форматирование кода. Выполняет скрипт format, который описан в секции "scripts" файла package.json. Обычно этот скрипт вызывает Prettier (если вы выбрали эту опцию при создании проекта). Цель этой команды: привести весь код в проекте к единому стилю (расставить кавычки, пробелы, переносы строк). Полезно запускать перед коммитом, чтобы код выглядел аккуратно и в пул-реквесте не было лишних правок. Пример: было `const name="John"`; станет `const name = "John";`. 3. npm run dev Запускает проект в режиме разработки. Поднимает локальный сервер разработки (на базе Vite). Проект становится доступен в браузере по адресу типа `http://localhost:5173`. Ключевая особенность (HMR — Hot Module Replacement): команда следит за вашими файлами. Как только вы сохраняете изменения в коде, страница в браузере обновляется мгновенно, без перезагрузки. Вы сразу видите результат правок. Это основная команда, которая используется в процессе написания кода. Вы её запускаете один раз в начале рабочего дня и оставляете работать. Опционально можно инициализировать репозиторий Git командой: git init && git add -A && git commit -m "initial commit" [Назначение файлов проекта] .editorconfig — это простой текстовый файл, который нужен для того, чтобы у всех разработчиков в команде (даже если они используют разные редакторы кода — VS Code, Sublime, WebStorm) были одинаковые базовые настройки форматирования. Это своеобразный «кодекс чести» для редакторов: он говорит твоей IDE, как себя вести с этим конкретным проектом. Prettier тоже форматирует код, но EditorConfig работает на уровень ниже. Их часто используют в паре: 1. EditorConfig — диктует базовые правила (самые фундаментальные). В файле EditorConfig прописываются самые важные вещи, которые влияют на читаемость кода и работу систем контроля версий (git): ● Кодировка файлов: обычно `utf-8`. Пример файла .editorconfig: # Корневой файл (выше не ищем) Как это работает? 1. Файл .editorconfig создается в корне проекта. Резюме: файл .editorconfig нужен, чтобы обеспечить визуальное единообразие кода на этапе его написания и избежать лишних конфликтов в git (когда весь файл помечается измененным только потому, что у одного разработчика стояли пробелы, а у другого табы). env.d.ts (или environment.d.ts) — это декларация типов для окружения. Он нужен, чтобы TypeScript понимал, что за штуки используются в коде, но приходят не из JavaScript/TypeScript файлов, а из окружения (обычно из Vite). Главная задача: обучить TypeScript работать с `import.meta.env`. В современных Vue-проектах на Vite все переменные окружения (например, ключи API, URL серверов) лежат в файле `.env` и доступны в коде через объект `import.meta.env`. Если ты просто напишешь в коде: const apiKey = import.meta.env.VITE_API_KEY ... то TypeScript начнет ругаться: > "Property 'VITE_API_KEY' does not exist on type 'ImportMetaEnv'". TypeScript не знает, какие именно переменные ты создал в своем `.env` файле. Ему нужно объяснить структуру этого объекта. Что делает env.d.ts? Этот файл расширяет (дополняет) глобальный тип `ImportMetaEnv`, добавляя в него твои кастомные переменные. Типичное содержимое env.d.ts в Vue-проекте: // Типы для импорта CSS-модулей Что здесь происходит? 1. `/// < reference types="vite/client" />` — подключает стандартные типы Vite. Без этой строки не будет работать `import.meta.env` вообще. 2. `interface ImportMetaEnv { ... }` — здесь ты описываешь свои переменные окружения, которые начинаются с `VITE_` (только они попадают в клиентский код). 3. `interface ImportMeta { ... }` — привязывает описанный выше `ImportMetaEnv` к объекту `import.meta.env`. Пример пользы. Допустим, у тебя есть файл `.env`: VITE_API_URL=https://api.example.com Если ты пропишешь их в env.d.ts: interface ImportMetaEnv { ... то при наборе `import.meta.env.` в редакторе VS Code появится автодополнение с этими двумя переменными. И если ты случайно опечатаешься (`import.meta.env.VITE_APL_URL`), TypeScript подсветит ошибку. Резюме: файл env.d.ts — мостик между твоими текстовыми переменными в `.env` файле и строгой системой типов TypeScript. Он делает переменные окружения типо-безопасными. eslint.config.ts — это конфигурационный файл для ESLint, написанный на TypeScript. Он появился в экосистеме ESLint относительно недавно и служит для централизованной настройки линтера в проекте. Этот файл нужен для того, чтобы определить правила, плагины и настройки, по которым ESLint будет анализировать ваш код. Главное преимущество использования TypeScript версии — полная типо-безопасность при написании конфигурации. Вы получаете автодополнение и проверку типов прямо в файле настроек. [Появление файла eslint.config.ts] 1. Начало (ESLint v9.9.0, август 2024): поддержка TypeScript-конфигов появилась как экспериментальная функция. Чтобы её включить, нужно было использовать специальный флаг `--flag unstable_ts_config` при запуске ESLint, а также устанавливать дополнительную зависимость `jiti` для Node.js. 2. Стабилизация (ESLint v9.18.0, январь 2025): функция стала стабильной. Теперь файлы `eslint.config.ts`, `.mts` и `.cts` можно использовать как обычные конфигурационные файлы без необходимости указывать экспериментальный флаг. Требование устанавливать `jiti` для Node.js сохранилось (для Deno и Bun он не нужен). [Типичное содержание] Современный eslint.config.ts обычно использует вспомогательную функцию defineConfig() для обеспечения типо-безопасности и новый механизм extends для удобного подключения сторонних конфигураций. // eslint.config.ts Что здесь происходит: defineConfig(): оборачивает конфигурацию для автодополнения. [Преимущества перед JS-конфигом] ● Типизация: автодополнение и проверка типов при написании конфига (благодаря defineConfig). Важное примечание: чтобы файл eslint.config.ts работал в Node.js, необходимо установить пакет jiti (или аналогичный, умеющий загружать TypeScript-файлы на лету), так как Node.js по умолчанию не понимает TypeScript. npm install --save-dev jiti В средах вроде Deno или Bun дополнительных действий не требуется — они поддерживают TypeScript "из коробки". Резюме: eslint.config.ts — современный, типо-безопасный способ настройки ESLint, который стал стабильным стандартом. Он позволяет удобно описывать правила для разных частей проекта и подключать готовые конфигурации, делая процесс линтинга прозрачнее и надежнее. index.html. Файл index.html в корне TypeScript-проекта Vue это единственный HTML-файл всего приложения. В отличие от традиционных веб-сайтов, где каждая страница имеет свой HTML, в SPA (Single Page Application) на Vue используется один входной HTML-файл, а весь остальной интерфейс генерируется JavaScript/TypeScript. 1. Точка входа в приложение Это единственный HTML-файл, который получает браузер при загрузке сайта. Все остальное (компоненты, страницы, роутер) загружается динамически через JavaScript. < !DOCTYPE html> < html lang="en"> < head> < meta charset="UTF-8" /> < link rel="icon" href="/favicon.ico" /> < meta name="viewport" content="width=device-width, initial-scale=1.0" /> < title>Мое Vue приложение< /title> < /head> < body> < div id="app">< /div> < script type="module" src="/src/main.ts">< /script> < /body> < /html> 2. Контейнер для Vue-приложения Внутри < body> есть элемент с `id="app"`. Это точка монтирования — именно сюда Vue будет рендерить всё приложение. Файл main.ts находит этот элемент и "запускает" в него Vue: // main.ts 3. Особенность Vite — это не статический файл В проектах на Vite (а `npm create vue@latest` использует Vite) файл index.html обрабатывается особым образом: ● Не является статическим ассетом: он не просто копируется в папку dist. Vite анализирует его, находит теги < script type="module" src="/..."> и обрабатывает указанные в них файлы как исходный код приложения. 4. Общие метаданные В этом файле задаются глобальные для всего приложения вещи: ● Заголовок страницы (< title>). В конфигурации по умолчанию index.html находится в корне проекта, а не в папке src, потому что: 1. Vite ожидает его именно там — это стандартное поведение. [TypeScript и index.html] Хотя сам файл — это HTML, TypeScript косвенно с ним взаимодействует: ● В main.ts (который TypeScript-файл) происходит обращение к DOM-элементу из index.html (#app). Резюме: index.html в Vue-проекте на TypeScript — это: 1. Физическая оболочка приложения (единственная HTML-страница). .oxlintrc.json. Файл .oxlintrc.json это конфигурационный файл для Oxlint, современного линтера для JavaScript и TypeScript, написанного на Rust. Если кратко — это аналог конфигурации ESLint, но для "супербыстрого линтера". Он позволяет настроить правила проверки кода под нужды вашего проекта. Прежде чем разбирать файл, важно понять, что это за инструмент. Oxlint — это линтер от создателей Vue (VoidZero), который: - Работает в 50-100 раз быстрее ESLint (написан на Rust). Файл .oxlintrc.json позволяет кастомизировать поведение Oxlint под ваш проект. Вот что можно настраивать: 1. Правила (Rules) Вы можете включать/отключать конкретные правила и задавать их строгость: {
2. Категории правил Можно включать целые группы правил одной строкой: - correctness — код, который точно неправильный (включено по умолчанию). {
3. Плагины Oxlint включает множество плагинов "из коробки" (TypeScript, React, Unicorn, Jest и др.). Вы можете явно указать, какие использовать: {
4. Игнорирование файлов Рекомендуемый способ указать, какие файлы не надо обрабатывать линтером: {
5. Окружение и глобальные переменные Можно указать, для какого окружения пишется код, чтобы линтер знал о глобальных переменных: {
6. Переопределения для разных типов файлов Например, для тестов можно ослабить правила: {
7. Наследование конфигураций В моно-репозиториях можно создать базовый конфиг в корне и расширять его в пакетах: {
Как это работает в проекте: 1. Создание: `npx oxlint --init` создаст базовый .oxlintrc.json. [Отношение к TypeScript-проекту Vue] В вашем Vue-проекте на TypeScript этот файл может: - Проверять TypeScript-файлы через плагин "typescript". Важное отличие от eslint.config.ts:
Oxlint также поддерживает oxlint.config.ts, но он требует Node.js-окружения, а .oxlintrc.json работает с бинарной версией. Резюме: .oxlintrc.json это ваш пульт управления для "молниеносного линтера". Он позволяет точечно настроить проверку кода, игнорировать ненужные файлы и поддерживать консистентность кода во всем проекте, экономя минуты (а в сумме — часы) ожидания на CI и в pre-commit хуках. package.json. Файл package.json — это сердце любого Node.js/JavaScript/TypeScript проекта, включая Vue-приложения. Он содержит метаданные о проекте, список зависимостей и доступные команды (скрипты). В TypeScript-проекте Vue этот файл играет ключевую роль, связывая все инструменты воедино: TypeScript, Vite, Vue, линтеры и тестовые фреймворки. [Основные секции package.json] 1. Метаданные проекта {
name — имя проекта (важно для публикации, но для приложения просто идентификатор). 2. Скрипты (самое важное для разработки) {
Это команды, которые можно запускать через `npm run`. Каждая строчка — это ярлык для длинной команды: npm run dev — запускает dev-сервер Vite. 3. Зависимости (dependencies) {
Здесь перечислены библиотеки, необходимые для работы приложения в публикации: vue — ядро фреймворка. 4. Зависимости для разработки (devDependencies) {
Инструменты, которые нужны только во время разработки: typescript — сам TypeScript. 5. Пакетный менеджер {
Указывает, какой именно пакетный менеджер используется и его версию (опционально). [Как это работает вместе] Когда вы создаете проект через `npm create vue@latest`, система: 1. Генерирует package.json с выбранными вами опциями. Взаимосвязь с TypeScript. В TypeScript-проекте package.json особенно важен, потому что он: ● Указывает версию TypeScript (typescript в devDependencies). [Типичный цикл разработки] 1. Клонировали проект: git clone ... 2. Установили зависимости (npm читает package.json): npm install 3. Запустили разработку (npm читает scripts): npm run dev 4. Проверили код: npm run lint 5. Собрали для публикации: npm run build Резюме: package.json это манифест проекта, который: 1. Описывает проект (имя, версия, автор). package-lock.json. Это автоматически генерируемый файл, который фиксирует точные версии всех установленных зависимостей (включая вложенные зависимости ваших зависимостей). Если package.json это список того, что нужно установить (часто с версиями вроде `^1.2.0` — "любая совместимая версия выше 1.2.0"), то package-lock.json это детальный отчет о том, что именно установилось. 1. Гарантия идентичности окружений Главная задача — чтобы у всех разработчиков в команде и на сервере (CI/CD, публикация) были абсолютно одинаковые версии всех пакетов. Без lock-файла: 1. Ты установил проект → получил версию 1.2.0 пакета Vue. C lock-файлом `npm install` читает package-lock.json и ставит те же версии, которые были у тебя. 2. Ускорение установки Файл содержит уже готовое дерево зависимостей. npm не нужно вычислять, какие версии каких пакетов совместимы друг с другом — он просто читает готовую структуру из lock-файла и скачивает то, что там указано. Что внутри? Файл package-lock.json это огромный JSON, который описывает полное дерево зависимостей: {
Для каждого пакета указано: ● Точная версия. Взаимодействие с package.json:
Важные правила работы: 1. Нужно коммитить в Git. Файл package-lock.json обязательно должен быть в репозитории. Это не "мусорный" файл, а важная часть проекта. Когда обновляется: 1. При добавлении нового пакета: `npm install axios`. [В контексте TypeScript и Vue] Для TypeScript-проекта Vue файл package-lock.json особенно важен, потому что влияют факторы: ● Типизация — многие `@types/...` пакеты должны быть строго совместимы с основными пакетами. Lock-файл гарантирует эту совместимость. Чем package-lock.json отличается от других lock-файлов:
Все они выполняют одну функцию, но в разных форматах. [Частые вопросы] Q: Что делать, если в lock-файле конфликт при merge? Q: Можно ли удалить lock-файл? Q: Почему lock-файл такой огромный? Резюме: package-lock.json это страховочная сетка вашего проекта: 1. Фиксирует точные версии всех пакетов. .prettierrc.json. Файл .prettierrc.json это конфигурационный файл для Prettier, который является инструментом для автоматического форматирования кода. В контексте TypeScript-проекта Vue он играет ключевую роль в поддержании единого стиля кода. Prettier (в переводе с английского — "красивее", "более красивый") — это "самомнительный" форматтер кода, который навязывает единый стиль оформления . Он автоматически переписывает ваш код, приводя его к заданным правилам форматирования. В TypeScript-проекте Vue этот файл нужен для того, чтобы: - Автоматически форматировать код при сохранении или по команде. [Что можно настроить] В файле .prettierrc.json вы определяете правила форматирования. Вот типичный набор настроек для Vue + TypeScript проекта: {
Популярные опции:
[Как это работает в проекте] 1. Файл конфигурации Файл .prettierrc.json помещается в корень проекта (рядом с package.json). Prettier автоматически найдет его и будет использовать эти правила. 2. Альтернативные форматы Prettier поддерживает множество форматов конфигурации: - .prettierrc (JSON/YAML). TypeScript-версия требует Node.js `>=22.6.0` и специальных флагов. 3. Игнорирование файлов Вместе с конфигом часто создают файл .prettierignore`, чтобы исключить ненужные файлы: node_modules dist *.md *.json 4. Интеграция с редактором VS Code с расширением Prettier может форматировать файлы автоматически при сохранении: // .vscode/settings.json { 5. Скрипты в package.json Обычно добавляют команды для форматирования: {
npm run format — отформатировать все файлы. [Связь с другими инструментами] EditorConfig. Prettier уважает .editorconfig и может автоматически преобразовывать его настройки. Если в проекте есть .editorconfig, то Prettier прочитает оттуда базовые параметры (отступы, кодировку), но более специфичные настройки возьмет из .prettierrc.json. ESLint. Prettier и ESLint часто работают в паре: - Prettier отвечает за форматирование (кавычки, запятые, отступы). Чтобы они не конфликтовали, устанавливают eslint-config-prettier и eslint-plugin-prettier. Это отключает правила ESLint, которые пересекаются с форматированием Prettier. [Пример работы] Было (не отформатировано): const user={ name:"John", age:30, city:"New York" } Стало (после Prettier с настройками выше): const user = { Преимущества для TypeScript + Vue проекта: 1. Поддержка Vue-файлов — Prettier отлично форматирует однофайловые компоненты (`.vue`), включая секции < template>, < script> и < style>. Резюме: .prettierrc.json это ваш пульт управления стилем кода. Он гарантирует, что независимо от того, кто пишет код — новичок в команде или опытный разработчик — результат будет выглядеть единообразно. В TypeScript-проекте Vue он особенно важен из-за смеси разных синтаксисов (TS, HTML, CSS) в одном файле, и помогает поддерживать чистоту и читаемость кодовой базы. tsconfig.json - это конфигурационный файл TypeScript (управление компилятором TypeScript). Он указывает TypeScript, как работать с вашим кодом: какие файлы компилировать, в какую версию JavaScript преобразовывать код и насколько строго проверять типы. 1. Управление строгостью проверок Самое важное для разработчика — настройки "strict". Они включают целый набор правил, которые заставляют писать более надежный код. "strict": true — включает максимальный режим проверок (рекомендуется). Заставляет, например, обрабатывать null и undefined. 2. Настройка модулей и версии JavaScript "target" — в какую версию JS превращать код (например, ES2020). Если вы пишете на современном TS, для старых браузеров можно указать ES5, и компилятор перепишет код с использованием устаревших конструкций, понятных везде. 3. Указание, что компилировать "include" — какие папки и файлы нужно обрабатывать (например, `src/**/*` — всё внутри папки src). 4. Настройка путей (алиасов) Позволяет настроить удобные пути для импортов, чтобы не писать длинные относительные пути. Пример: вместо `components/Button` можно писать `@/components/Button`, если в файле прописано: "paths": { [Типичный пример для Vue-проекта] При создании проекта командой npm create vue@latest с опцией TypeScript файл tsconfig.json будет выглядеть примерно так: {
Часто конфиг разбивают на два, потому что код для браузера и код конфигурации (Vite) работают в разных окружениях. tsconfig.app.json. Это специализированный конфигурационный файл TypeScript, который создается автоматически при генерации нового Vue-проекта с поддержкой TypeScript (например, через npm create vue@latest). Его основное назначение — управление компиляцией и проверкой типов для кода вашего приложения, то есть для файлов, которые будут выполняться в браузере . В современной архитектуре Vue + TypeScript принято разделять конфигурацию на несколько файлов для разных сред исполнения. Файл tsconfig.app.json отвечает именно за вашу frontend-часть. 1. Настройка компиляции для браузерного окружения Файл расширяет (extends) базовую конфигурацию Vue для DOM-окружения — `@vue/tsconfig/tsconfig.dom.json`. Это автоматически добавляет правильные настройки `lib` (включая `dom`), обеспечивая корректную работу TypeScript с браузерными API (например, `document`, `window`). 2. Определение области видимости (какие файлы обрабатывать) Секция "include" указывает TypeScript, какие файлы проекта относятся к приложению и должны проверяться: ● Все файлы в папке src (`src/**/*`). Секция "exclude" обычно исключает тесты (`src/**/__tests__/*`), чтобы они не попадали в основную сборку. 3. Настройка путей (алиасов) В этом файле прописывается популярная конфигурация для использования символа `@` как ссылки на папку src: "compilerOptions": { Благодаря этому, вместо длинных импортов вроде `components/Button` вы можете писать `@/components/Button`, и TypeScript будет понимать, что это значит. 4. Ускорение сборки (инкрементальная компиляция) Опция `"composite": true` и настройка "tsBuildInfoFile" включают режим Project References, который позволяет TypeScript кэшировать результаты предыдущей компиляции и пересобирать только изменившиеся файлы. Информационный файл сохраняется во временную папку (./node_modules/.tmp/), не засоряя корень проекта. 5. Управление строгостью проверок Здесь задаются правила для качества кода именно в приложении: "strict": true — включает максимальный режим проверки типов. [Как это связано с другими tsconfig-файлами?] В проекте обычно есть три связанных конфигурационных файла:
Резюме: tsconfig.app.json это "личный кабинет" вашего Vue-приложения. Он говорит TypeScript: 1. Где лежит код приложения (папка src). Без него TypeScript не знал бы, как обрабатывать `.vue` файлы и на какие типы (браузерные или node.js) ориентироваться. tsconfig.node.json. Это конфигурационный файл TypeScript, предназначенный специально для кода, который выполняется в среде Node.js, а не в браузере. В Vue-проектах он используется для настройки TypeScript для инструментов сборки и конфигурационных файлов. 1. Настройка для Node.js окружения В отличие от tsconfig.app.json, который настроен для браузера (с DOM-типами), tsconfig.node.json конфигурирует TypeScript для работы в Node.js среде. Это означает: - Использование типов Node.js (через `@types/node`). 2. Обработка конфигурационных файлов Этот файл нужен для TypeScript-проверки файлов, которые не попадают в браузер, а используются только во время разработки и сборки: - vite.config.ts — конфигурация Vite. 3. Project References Вместе с tsconfig.app.json и корневым tsconfig.json участвует в системе Project References языка TypeScript, что позволяет: - Разделить код на независимые части. Типичное содержимое: {
[Ключевые особенности] Базовая конфигурация. Обычно расширяет (`extends`) готовый конфиг от `@tsconfig/nodeXX` (где XX — версия Node.js), что гарантирует правильные настройки для вашей версии Node.js. Отсутствие Vue-компонентов. В `include` **нет** `src/**/*.vue` — это важно, потому что Vue-компоненты не должны обрабатываться как Node.js-код. Типы. В `compilerOptions.types` обычно указан `["node"]`, что подключает глобальные типы Node.js (процессы, файловая система, пути). Проблема, которую решает разделение: в одном проекте есть код, работающий в двух принципиально разных средах: 1. Браузер — ваш Vue-код в src/ (имеет доступ к DOM, не имеет доступа к файловой системе). Если использовать один tsconfig.json для всего, то TypeScript будет путаться — либо не найдет типы Node.js, либо будет ругаться на использование Node.js-специфичных функций в браузерном коде. Решение: tsconfig.app.json — для браузерного кода (с DOM-типами). [Взаимосвязь с другими файлами] // tsconfig.json { Такая структура позволяет запускать `tsc --build` (или `vue-tsc -b`) и проверять оба набора файлов одной командой. Важные отличия от tsconfig.app.json:
[Практическое применение] Благодаря tsconfig.node.json: 1. Vite config получает правильную типизацию — вы видите автодополнение для `defineConfig`. Типичный сценарий использования. Проверить типы во всем проекте (и в приложении, и в конфигах): npm run build # обычно запускает vue-tsc -b Или отдельно: npx vue-tsc -b tsconfig.app.json # только приложение Резюме: tsconfig.node.json это конфигурация TypeScript для инструментов разработки. Он обеспечивает корректную проверку типов в файлах конфигурации (Vite, Vitest и др.), которые работают в Node.js, а не в браузере. Без него TypeScript не знал бы, как правильно обрабатывать vite.config.ts, и не понимал бы Node.js-специфичные API в этих файлах. vite.config.ts. Файл vite.config.ts — это конфигурационный файл для Vite (современного инструмента сборки и сервера разработки), написанный на TypeScript. В Vue-проекте он является центральным узлом, связывающим все инструменты и настройки воедино. 1. Конфигурация сервера разработки Vite предоставляет быстрый dev-сервер с горячей заменой модулей (HMR). В конфиге можно настроить: - Порт и хост (`port: 3000`, `host: true`). export default defineConfig({ 2. Настройка сборки (build) Определяет, как проект будет собираться для публикации: - Выходная папка (обычно dist). 3. Подключение плагинов Самое важное — через vite.config.ts подключаются плагины, которые добавляют функциональность: import vue from '@vitejs/plugin-vue' // Поддержка Vue-файлов 4. Настройка алиасов (путей) Позволяет создавать удобные сокращения для импортов, которые синхронизируются с настройками TypeScript: import path from 'path' 5. Переменные окружения Определяет, как обрабатывать переменные из `.env` файлов и какие из них доступны в клиентском коде (только с префиксом VITE_). [Типичное содержимое для Vue + TypeScript проекта] import { fileURLToPath, URL } from 'node:url' Почему именно TypeScript? Использование vite.config.ts (вместо `.js`) дает важные преимущества: 1. Автодополнение — благодаря `defineConfig` и типам Vite вы получаете подсказки по всем опциям прямо в редакторе. Взаимосвязь с другими файлами: 1. Связь с tsconfig.node.json: поскольку vite.config.ts выполняется в Node.js, а не в браузере, он обрабатывается через tsconfig.node.json, который подключает типы Node.js и правильные настройки модулей. Основные возможности, настраиваемые в vite.config.ts:
[Типичные сценарии использования] Настройка прокси для API: server: { Поддержка старых браузеров: build: { Настройка глобальных переменных: define: { Резюме: vite.config.ts это пульт управления всем процессом разработки и сборки. Он выполняет следующее: 1. Настраивает dev-сервер для комфортной разработки. Без этого файла Vite не знал бы, что ваш проект использует Vue, как обрабатывать `.vue` файлы и куда складывать собранный код. [Ссылки] |