Недавно я опубликовал статью о моем новом проекте Matterhorn 🏔, шаблоне сервера API Node.js. Он предоставляет набор нестандартных файлов конфигурации и некоторый базовый пример кода. Это помогает разработчикам быстрее приступить к работе с Node.js и TypeScript.
Matterhorn вдохновлен такими проектами, как Create React App и Gatsby CLI. Цель проекта - устранить барьер входа, необходимый для использования инструментов программирования, таких как системы типов, среды тестирования и линтинга, и даже базовую непрерывную интеграцию.
В этом сообщении в блоге будут рассмотрены все основные аспекты Маттерхорна. Я буду обсуждать детали и свое мнение в рамках выбора.
Среда выполнения и система типов
Ядро этого проекта построено на Node.js, среде выполнения JavaScript, построенной на движке JavaScript V8 Chrome. Для запуска этого проекта рекомендуется использовать последнюю стабильную версию Node.js. На момент написания этого сообщения это 11.7.0.
Node.js управляется неблокирующим циклом событий, что делает его отличным выбором для создания масштабируемых сетевых приложений. Для получения дополнительной информации о Node.js посетите их сайт.
Многие проекты Node.js написаны на JavaScript. Однако TypeScript, система типов для JavaScript, стала свидетелем всплеска внимания в конце 2018 года. Многие разработчики заинтересованы в изучении TypeScript в 2019 году. Его применение в проектах JavaScript с открытым исходным кодом растет. Первоначальная цель Matterhorn заключалась в том, чтобы дать толчок разработчикам, заинтересованным в создании серверных приложений Node.js с помощью TypeScript. Таким образом, сам Маттерхорн написан на TypeScript.
Как система типов TypeScript очень всеобъемлющий. Хотя поначалу может потребоваться крутая кривая обучения, преимущества от его использования имеют первостепенное значение. Это помогает вам, разработчику, писать более чистый код с меньшими ошибками. А когда вы познакомитесь с экосистемой и процессом настройки, вы будете писать новые функции быстрее, чем с помощью встроенного JavaScript. В редакторах, таких как VSCode, TypeScript включен по умолчанию. Он предоставляет обширный набор инструментов разработчика для дальнейшего улучшения опыта разработчиков.
Фреймворк API
Хотя можно написать HTTP API, используя только Node.js, если разработчик хочет достичь поддерживаемости, безопасности и масштабируемости экосистемы, он должен использовать инфраструктуру API. Когда дело доходит до фреймворков API Node.js, есть множество вариантов, из которых можно выбрать, например Express, Koa и Hapi. Но есть один фреймворк, который быстрее и устойчивее всех остальных: Fastify.
Fastify - это быстрый веб-фреймворк с низкими накладными расходами для Node.js. Он вдохновлен Hapi и Express и работает на основе архитектуры плагинов. У него очень здоровое сообщество с открытым исходным кодом и более 90 общедоступных плагинов от аутентификации до привязок к базам данных и всего, что между ними. Кроме того, Fastify поддерживает собственный набор привязок TypeScript, которые поставляются с модулем непосредственно из NPM.
Тестовый прогон и ЛИНТЕР
Резервное копирование кода с помощью модульных тестов является стандартом в современной экосистеме программирования. Matterhorn поставляется с Jest, популярным средством запуска тестов JavaScript. Он настроен для работы с TypeScript и даже содержит несколько примеров для тестирования вашего Fastify API. Обратите внимание на inject
метод Fastify; это очень полезно для тестирования поведения ваших маршрутов.
В дополнение к запуску тестов Jest также настроен для вывода документов покрытия кода. Хотя покрытие кода не является самым важным показателем, который следует учитывать при написании модульных тестов, он очень полезен и может помочь вам убедиться, что вы покрываете как минимум как можно большую часть своей кодовой базы.
В сообществе открытого исходного кода линтеры кода являются популярным выбором для обеспечения определенного стиля программирования. Они исключают необходимость стилистической проверки кода. Они могут помочь разработчикам выявлять ошибки в своем коде до его запуска.
Matterhorn оснащен ESLint, популярным выбором для линтинга JavaScript. Первоначально проект поставлялся с TSLint. Однако это было заменено на ESLint, потому что TypeScript официально объявил о планах прямой поддержки проекта ESLint. Линтер настраивается с учетом мнения специалистов по сопровождению проекта. Его можно легко изменить в соответствии с вашими собственными стилистическими принципами.
Непрерывная интеграция
Последний аспект Matterhorn - это включение полностью настроенного конвейера непрерывной интеграции. Для многих разработчиков, особенно тех, кто учится или просто мастерит, эта функция может не иметь особого смысла. Однако для тех, кто пытается разработать полное приложение и желает стабильности корпоративной разработки, этот CI предназначен для них.
Конвейер построен на базе Azure DevOps (ранее называвшейся Visual Studio Team Services). Azure DevOps бесплатен для общедоступных репозиториев, а служебные программы конвейера обширны. Его можно настроить программно (Маттерхорн) или через визуальный редактор (в браузере). Вы можете проверить конвейер CI Маттерхорна здесь. Он автоматически строится для обновлений запросов на вытягивание и любых новых коммитов на master.
Заключение
Спасибо, что нашли время прочитать о различных аспектах Маттерхорна. Многое было учтено при выборе сервисов и модулей для этого проекта. Это проект с открытым исходным кодом, и есть много возможностей для улучшения, поэтому, если вы хотите внести свой вклад, ознакомьтесь с ним ниже.