1. Настройка окружения: инициализация проекта на Electron, TypeScript и выбор UI-фреймворка
Настройка окружения: инициализация проекта на Electron, TypeScript и выбор UI-фреймворка
Добро пожаловать в курс по разработке Desktop VPN-клиента! В этой первой статье мы заложим фундамент нашего будущего приложения. Мы не просто напишем «Hello World», а создадим профессиональную архитектуру, готовую к масштабированию и работе с системными сетями.
Наша цель — создать кроссплатформенное приложение (Windows, macOS, Linux), которое будет управлять VPN-соединением. Для этого мы выбрали связку Electron и TypeScript.
Почему Electron и TypeScript?
Прежде чем открывать терминал, давайте разберемся, почему мы выбрали именно эти инструменты.
Electron — это фреймворк, который позволяет создавать нативные приложения для рабочего стола с использованием веб-технологий (HTML, CSS, JavaScript). По сути, ваше приложение — это специальная версия браузера Chromium, управляемая Node.js.
TypeScript — это надстройка над JavaScript, добавляющая статическую типизацию. При разработке VPN-клиента нам придется работать со строгими структурами данных (конфигурации сети, статусы подключения, ошибки). TypeScript не позволит нам «выстрелить себе в ногу», перепутав строку с числом или обратившись к несуществующему свойству объекта.
Архитектура Electron
Понимание архитектуры критически важно. Electron-приложение состоит из двух типов процессов:
!Взаимодействие основного процесса и процесса отрисовки через IPC
Шаг 1: Проверка требований
Для начала убедитесь, что у вас установлены Node.js и пакетный менеджер npm (обычно устанавливается вместе с Node.js). Откройте терминал и введите:
Если вы видите версии (например, v18.x.x и 9.x.x), можно продолжать. Если нет — скачайте LTS-версию с официального сайта Node.js.
Шаг 2: Инициализация проекта
Создадим папку для нашего VPN-клиента и инициализируем package.json. Этот файл будет хранить информацию о проекте и его зависимостях.
Флаг -y автоматически заполняет все поля значениями по умолчанию. Позже вы сможете изменить их в файле package.json.
Шаг 3: Установка зависимостей
Нам понадобятся сам Electron, TypeScript и типы для них. Мы установим их как devDependencies (зависимости для разработки), так как в финальной сборке они будут скомпилированы.
Выполните команду:
* electron: сам фреймворк.
* typescript: компилятор TS.
* ts-node: позволяет запускать TS-файлы напрямую (удобно для разработки).
* @types/...: описания типов, чтобы TypeScript понимал, какие методы есть у Node.js и Electron.
Шаг 4: Настройка TypeScript
Чтобы TypeScript знал, как компилировать наш код, нужно создать файл конфигурации tsconfig.json. Создайте его в корне проекта со следующим содержимым:
Разберем ключевые настройки:
* outDir: куда складывать скомпилированные JS-файлы (папка dist).
* rootDir: где лежит наш исходный код (папка src).
* strict: включает строгий режим проверки типов (максимальная безопасность).
Шаг 5: Создание структуры проекта
Создайте папку src в корне проекта. Внутри неё мы разделим код на логические части:
Написание Main Process
Откройте src/main.ts. Это сердце нашего приложения. Напишем код, который создает окно:
Обратите внимание на webPreferences. Мы намеренно отключаем nodeIntegration и включаем contextIsolation. Это стандарт безопасности: веб-страница не должна иметь прямого доступа к require('fs') или require('child_process'), иначе любой XSS-уязвимости будет достаточно, чтобы взломать компьютер пользователя.
Шаг 6: Выбор UI-фреймворка
Теперь нам нужно решить, на чем писать интерфейс. Electron может отображать любой HTML/CSS. Однако для современного VPN-клиента нам нужны реактивность, состояние (подключено/отключено, скорость, выбранная страна) и компоненты.
Рассмотрим варианты:
Наш выбор: React. Почему? Потому что VPN-клиент имеет много состояний (инициализация, рукопожатие, подключение, ошибка, разрыв). Модель компонентов React идеально подходит для переключения этих состояний интерфейса.
Примечание: В этой статье мы создадим базовый HTML-файл для проверки работоспособности Electron. Полноценную интеграцию React и настройку сборщика (Vite или Webpack) мы выполним в следующей статье, чтобы не перегружать текущий урок.
Создайте файл index.html в корне проекта (рядом с package.json, не в src, так как пока мы не настроили копирование ассетов):
Шаг 7: Запуск приложения
Осталось научить package.json запускать наш проект. Нам нужно сначала скомпилировать TypeScript в JavaScript, а затем запустить Electron.
Откройте package.json и найдите секцию scripts. Замените её на:
Важно: Мы изменили поле "main" на "dist/main.js", так как Electron должен запускать уже скомпилированный файл, а не исходник на TS.
Теперь в терминале выполните:
Если вы всё сделали правильно, откроется окно с заголовком «VPN Client Initialization». Поздравляю! Вы создали каркас своего будущего VPN-сервиса.
В следующей статье мы интегрируем React, настроим горячую перезагрузку (Hot Module Replacement) и начнем проектировать интерфейс.