Десятилетие влияния: как наши пакеты npm достигли 1 миллиарда загрузок и сформировали JavaScript
В JavaScript а также Node.js world, некоторые пакеты являются необходимыми — загружаются миллионы раз ежедневно и обеспечивают работу приложений по всему миру. За этими инструментами стоят разработчики, ориентированные на качество открытого исходного кода. Сегодня мы показываем, как наша команда помогает создавать и поддерживать пакеты npm, которые стали ключевыми частями экосистемы JavaScript.
Пионеры, которые нам доверяют: Айзек З. Шлютер и пересылка электронной почты
Мы гордимся тем, что у нас есть Исаак З. Шлютер (GitHub: исаакс) как пользователь. Айзек создал над уровнем моря и помог построить Node.js. Его доверие к Forward Email показывает нашу нацеленность на качество и безопасность. Айзек использует Forward Email для нескольких доменов, включая izs.me.
Влияние Айзека на JavaScript огромно. В 2009 году он был одним из первых, кто увидел потенциал Node.js, работая с Райан Даль, который создал платформу. Как сказал Айзек в интервью журналу Increment: «Посреди этого очень маленького сообщества, состоящего из группы людей, пытающихся понять, как реализовать серверный JS, Райан Даль выступил с Node, что было совершенно очевидно правильным подходом. Я вложил в это свои силы и включился в работу примерно в середине 2009 года».
[!ПРИМЕЧАНИЕ] Для тех, кто интересуется историей Node.js, доступны прекрасные документальные фильмы, описывающие его развитие, в том числе История Node.js а также 10 вещей, о которых я сожалею в Node.js - Райан Даль. Райан Даль личный веб-сайт также содержит ценную информацию о его работе.
От создания npm до лидерства Node.js
Айзек создал npm в сентябре 2009 года, а первая пригодная к использованию версия была выпущена в начале 2010 года. Этот менеджер пакетов заполнил ключевую потребность в Node.js, позволив разработчикам легко обмениваться и повторно использовать код. Согласно Страница Node.js в Википедии, «В январе 2010 года был представлен менеджер пакетов для среды Node.js под названием npm. Менеджер пакетов позволяет программистам публиковать и обмениваться пакетами Node.js вместе с сопутствующим исходным кодом и предназначен для упрощения установки, обновления и удаления пакетов».
Когда Райан Даль ушел из Node.js в январе 2012 года, Айзек занял пост руководителя проекта. Как отмечено на его резюмеОн «руководил разработкой нескольких фундаментальных основных API Node.js, включая модульную систему CommonJS, API файловой системы и потоки» и «выступал в качестве пожизненного благожелательного диктатора (BDFL) проекта в течение 2 лет, обеспечивая постоянное повышение качества и надежности процесса сборки для версий Node.js v0.6 — v0.10».
Айзек провел Node.js через ключевой период роста, установив стандарты, которые и сегодня формируют платформу. Позже в 2014 году он основал npm, Inc. для поддержки реестра npm, который он ранее вел самостоятельно.
Мы благодарим Айзека за его огромный вклад в JavaScript и продолжаем использовать множество созданных им пакетов. Его работа изменила то, как мы создаем программное обеспечение и как миллионы разработчиков по всему миру делятся кодом.
Архитектор кода: путешествие Ника Бо
В основе нашего успеха с открытым исходным кодом лежит Ник Бо, основатель и владелец Forward Email. Его работа в JavaScript длится почти 20 лет и определила, как бесчисленное множество разработчиков создают приложения. Его путь с открытым исходным кодом демонстрирует как технические навыки, так и лидерство в сообществе.
Экспресс-технический комитет и основные вклады
Опыт Ника в области веб-фреймворков позволил ему занять место в Экспресс Технический Комитет, где он помог с одним из самых используемых фреймворков Node.js. Ник теперь указан как неактивный участник на Страница сообщества Express.
[!ВАЖНО] Express изначально был создан TJ Holowaychuk, плодовитым участником открытого исходного кода, который сформировал большую часть экосистемы Node.js. Мы благодарны за основополагающую работу TJ и уважаем его решение сделать перерыв из его обширного вклада в разработку ПО с открытым исходным кодом.
Как член Экспресс Технический КомитетНик проявил большое внимание к деталям в таких вопросах, как разъяснение req.originalUrl
документирование и устранение проблем с обработкой многокомпонентных форм.
Вклад в фреймворк Koa
Работа Ника с Фреймворк Koa—современная, более легкая альтернатива Express, также созданная TJ Holowaychuk — еще раз демонстрирует его приверженность к улучшению инструментов веб-разработки. Его вклад в Koa включает как проблемы, так и код через pull-запросы, решение проблем с обработкой ошибок, управление типами контента и улучшения документации.
Его работа в Express и Koa дает ему уникальный взгляд на веб-разработку Node.js, помогая нашей команде создавать пакеты, которые хорошо работают с различными экосистемами фреймворков.
От индивидуального участника до руководителя организации
То, что начиналось как помощь существующим проектам, переросло в создание и поддержку целых экосистем пакетов. Ник основал несколько организаций GitHub, включая Кабина, Спам сканер, Пересылать сообщения электронной почты, Позволять, а также Бри— каждый из которых решает определенные потребности сообщества JavaScript.
Этот переход от участника к лидеру демонстрирует видение Ника в отношении хорошо спроектированного программного обеспечения, которое решает реальные проблемы. Организовывая связанные пакеты в рамках специализированных организаций GitHub, он создал экосистемы инструментов, которые работают вместе, оставаясь модульными и гибкими для более широкого сообщества разработчиков.
Наши организации GitHub: экосистемы инноваций
Мы организуем нашу работу с открытым исходным кодом вокруг специализированных организаций GitHub, каждая из которых решает определенные потребности в JavaScript. Эта структура создает сплоченные семейства пакетов, которые хорошо работают вместе, оставаясь модульными.
Кабина: Структурированное ведение журнала для современных приложений
Организация каюты это наш взгляд на простую, мощную регистрацию приложений. Основной cabin
Пакет имеет почти 900 звезд GitHub и более 100 000 еженедельных загрузок[^1]. Cabin обеспечивает структурированное ведение журнала, которое работает с популярными сервисами, такими как Sentry, LogDNA и Papertrail.
Что делает Cabin особенным, так это его продуманный API и система плагинов. Поддерживающие пакеты, такие как axe
для Express промежуточного программного обеспечения и parse-request
для анализа HTTP-запросов демонстрируют нашу приверженность комплексным решениям, а не изолированным инструментам.
bson-objectid
Пакет заслуживает особого упоминания, с более чем 1,7 миллиона загрузок всего за два месяца[^2]. Эта легкая реализация MongoDB ObjectID стала выбором для разработчиков, которым нужны идентификаторы без полных зависимостей MongoDB.
Спам-сканер: борьба со злоупотреблениями электронной почтой
Организация спам-сканера показывает нашу приверженность решению реальных проблем. Главное spamscanner
Пакет обеспечивает расширенное обнаружение спама в электронной почте, но это url-regex-safe
пакет, который получил удивительное распространение.
За два месяца было скачано более 1,2 миллиона раз[^3], url-regex-safe
исправляет критические проблемы безопасности в других регулярных выражениях обнаружения URL. Этот пакет демонстрирует наш подход к открытому исходному коду: поиск общей проблемы (в данном случае, RedoS уязвимости в проверке URL-адресов), создание надежного решения и его тщательная поддержка.
Бри: Современное планирование работы с рабочими потоками
Организация Бри это наш ответ на распространенную проблему Node.js: надежное планирование заданий. Главное bree
Пакет, получивший более 3100 звезд на GitHub, представляет собой современный планировщик заданий, использующий рабочие потоки Node.js для повышения производительности и надежности.
[!ПРИМЕЧАНИЕ] Бри была создана после того, как мы помогли сохранить Повестка дня, применение извлеченных уроков для создания лучшего планировщика заданий. Наши вклады в Agenda помогли нам найти способы улучшить планирование заданий.
Чем Bree отличается от других планировщиков, таких как Agenda:
- Никаких внешних зависимостей: В отличие от Agenda, которой требуется MongoDB, Bree не требует Redis или MongoDB для управления состоянием задания.
- Рабочие потоки: Бри использует рабочие потоки Node.js для изолированных процессов, обеспечивая лучшую изоляцию и производительность.
- Простой API: Bree предлагает детальный контроль и простоту, что упрощает реализацию сложных задач планирования.
- Встроенная поддержка: Такие функции, как плавная перезагрузка, задания cron, даты и удобное для пользователя время, включены по умолчанию.
Бри является ключевой частью forwardemail.net, обрабатывая критические фоновые задачи, такие как обработка электронной почты, очистка и плановое обслуживание. Использование Bree в Forward Email показывает нашу приверженность использованию собственных инструментов в производстве, гарантируя, что они соответствуют высоким стандартам надежности.
Мы также используем и ценим другие замечательные пакеты рабочих потоков, такие как бассейн и HTTP-клиенты, такие как одиннадцать. Piscina, как и Bree, использует рабочие потоки Node.js для эффективной обработки задач. Мы благодарим Мэтью Хилл, который поддерживает undici и piscina, за его значительный вклад в Node.js. Маттео входит в Технический руководящий комитет Node.js и значительно улучшил возможности HTTP-клиента в Node.js.
Пересылка электронной почты: инфраструктура электронной почты с открытым исходным кодом
Наш самый амбициозный проект — Пересылать сообщения электронной почты, служба электронной почты с открытым исходным кодом, которая обеспечивает пересылку электронной почты, хранение и API-сервисы. Основной репозиторий имеет более 1100 звезд GitHub[^4], что показывает признательность сообщества за эту альтернативу фирменным службам электронной почты.
preview-email
Пакет этой организации, с более чем 2,5 миллионами загрузок за два месяца[^5], стал важным инструментом для разработчиков, работающих с шаблонами электронной почты. Предоставляя простой способ предварительного просмотра писем во время разработки, он решает распространенную проблему при создании приложений с поддержкой электронной почты.
Lad: Основные утилиты и инструменты Koa
Парни организация предоставляет набор необходимых утилит и инструментов, в первую очередь направленных на улучшение экосистемы фреймворка Koa. Эти пакеты решают общие проблемы в веб-разработке и предназначены для бесперебойной работы вместе, оставаясь при этом полезными независимо.
koa-better-error-handler: Улучшенная обработка ошибок для Koa
koa-better-error-handler
предлагает лучшее решение для обработки ошибок в приложениях Koa. С более чем 50 звездами GitHub этот пакет делает ctx.throw
создавать понятные сообщения об ошибках, устраняя при этом ряд ограничений встроенного обработчика ошибок Koa:
- Обнаруживает и правильно обрабатывает ошибки DNS Node.js, ошибки Mongoose и ошибки Redis
- Использует Бум для создания последовательных, хорошо отформатированных ответов об ошибках
- Сохраняет заголовки (в отличие от встроенного обработчика Koa)
- Поддерживает соответствующие коды статуса, а не 500 по умолчанию
- Поддерживает мгновенные сообщения и сохранение сеанса
- Предоставляет списки ошибок HTML для ошибок проверки
- Поддерживает несколько типов ответов (HTML, JSON и простой текст)
Этот пакет особенно ценен при использовании вместе с koa-404-handler
для комплексного управления ошибками в приложениях Koa.
паспорт: Аутентификация для Лада
@ladjs/passport
расширяет популярное промежуточное ПО аутентификации Passport.js с помощью специальных улучшений для современных веб-приложений. Этот пакет поддерживает несколько стратегий аутентификации из коробки:
- Локальная аутентификация с помощью электронной почты
- Войти с помощью Apple
- Аутентификация GitHub
- Google-аутентификация
- Аутентификация с помощью одноразового пароля (OTP)
Пакет обладает высокой степенью настраиваемости, позволяя разработчикам корректировать имена полей и фразы в соответствии с требованиями их приложений. Он разработан для бесшовной интеграции с Mongoose для управления пользователями, что делает его идеальным решением для приложений на основе Koa, которым требуется надежная аутентификация.
graceful: элегантное завершение работы приложения
@ladjs/graceful
решает критическую задачу изящного завершения приложений Node.js. С более чем 70 звездами GitHub этот пакет гарантирует, что ваше приложение может быть завершено чисто, без потери данных или зависания соединений. Основные функции включают:
- Поддержка корректного закрытия HTTP-серверов (Express/Koa/Fastify)
- Чистое завершение соединений с базой данных (MongoDB/Mongoose)
- Правильное закрытие клиентов Redis
- Обработка планировщиков заданий Bree
- Поддержка пользовательских обработчиков завершения работы
- Настраиваемые параметры тайм-аута
- Интеграция с системами регистрации
Этот пакет необходим для производственных приложений, где неожиданные отключения могут привести к потере или повреждению данных. Внедряя надлежащие процедуры отключения, @ladjs/graceful
помогает обеспечить надежность и стабильность вашего приложения.
Upptime: Мониторинг времени безотказной работы с открытым исходным кодом
Организация безотказной работы представляет нашу приверженность прозрачному мониторингу с открытым исходным кодом. Основной upptime
Репозиторий имеет более 13 000 звезд GitHub, что делает его одним из самых популярных проектов, в которые мы вносим свой вклад. Upptime предоставляет монитор времени безотказной работы на базе GitHub и страницу статуса, которая работает полностью без сервера.
Мы используем Upptime для нашей собственной страницы статуса https://status.forwardemail.net с исходным кодом, доступным по адресу https://github.com/forwardemail/status.forwardemail.net.
Особенным Upptime делает его архитектура:
- 100% открытый исходный код: Каждый компонент имеет полностью открытый исходный код и может быть настроен.
- При поддержке GitHub: использует действия, проблемы и страницы GitHub для решения бессерверного мониторинга.
- Сервер не требуется: В отличие от традиционных инструментов мониторинга, Upptime не требует от вас запуска или обслуживания сервера.
- Автоматическая страница статуса: Создает красивую страницу статуса, которую можно разместить на GitHub Pages.
- Мощные уведомления: Интегрируется с различными каналами уведомлений, включая электронную почту, SMS и Slack.
Чтобы улучшить опыт наших пользователей, мы интегрировали @octokit/core в кодовую базу forwardemail.net для отображения обновлений статуса и инцидентов в реальном времени непосредственно на нашем веб-сайте. Эта интеграция обеспечивает нашим пользователям четкую прозрачность в случае возникновения любых проблем во всем нашем стеке (веб-сайт, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree и т. д.) с мгновенными уведомлениями, изменениями значков значков, цветами предупреждений и многим другим.
Библиотека @octokit/core позволяет нам получать данные в реальном времени из нашего репозитория Upptime GitHub, обрабатывать их и отображать в удобном для пользователя виде. Когда какой-либо сервис выходит из строя или производительность снижается, пользователи немедленно уведомляются об этом с помощью визуальных индикаторов, не покидая основное приложение. Эта бесшовная интеграция гарантирует, что наши пользователи всегда будут иметь актуальную информацию о состоянии нашей системы, что повышает прозрачность и доверие.
Upptime был принят сотнями организаций, которые ищут прозрачный и надежный способ мониторинга своих услуг и сообщения статуса пользователям. Успех проекта демонстрирует силу создания инструментов, которые используют существующую инфраструктуру (в данном случае GitHub) для решения распространенных проблем новыми способами.
Наш вклад в экосистему пересылки электронной почты
Хотя наши пакеты с открытым исходным кодом используются разработчиками по всему миру, они также формируют основу нашей собственной службы пересылки электронной почты. Эта двойная роль — как создателей, так и пользователей этих инструментов — дает нам уникальный взгляд на их реальное применение и стимулирует постоянное совершенствование.
От упаковок до производства
Путь от отдельных пакетов к целостной производственной системе включает в себя тщательную интеграцию и расширение. Для пересылки электронной почты этот процесс включает:
- Пользовательские расширения: Создание расширений Forward Email, специально предназначенных для наших пакетов с открытым исходным кодом, которые отвечают нашим уникальным требованиям.
- Модели интеграции: Разработка шаблонов взаимодействия этих пакетов в производственной среде.
- Оптимизация производительности: Выявление и устранение узких мест в производительности, которые возникают только при масштабировании.
- Усиление безопасности: Добавление дополнительных уровней безопасности, специфичных для обработки электронной почты и защиты пользовательских данных.
Эта работа представляет собой тысячи часов разработки, выходящие за рамки основных пакетов, что привело к созданию надежного и безопасного сервиса электронной почты, использующего лучшие из наших вкладов в области ПО с открытым исходным кодом.
Цикл обратной связи
Возможно, наиболее ценным аспектом использования наших собственных пакетов в производстве является создаваемый им цикл обратной связи. Когда мы сталкиваемся с ограничениями или пограничными случаями в пересылке электронной почты, мы не просто исправляем их локально — мы улучшаем базовые пакеты, принося пользу как нашему сервису, так и более широкому сообществу.
Такой подход привел к многочисленным улучшениям:
- Изящное отключение Бри: Потребность Forward Email в развертывании с нулевым временем простоя привела к расширению возможностей постепенного завершения работы в Бри.
- Распознавание образов спам-сканером: Реальные образцы спама, встречающиеся в пересылаемых сообщениях электронной почты, легли в основу алгоритмов обнаружения спам-сканера.
- Оптимизация производительности кабины: Массовая регистрация в производственных условиях выявила возможности оптимизации в Cabin, которые приносят пользу всем пользователям.
Поддерживая этот эффективный цикл между нашей работой с открытым исходным кодом и производственным сервисом, мы гарантируем, что наши пакеты остаются практичными, проверенными в бою решениями, а не теоретическими реализациями.
Основные принципы пересылки электронных писем: основа совершенства
Пересылка электронной почты разработана в соответствии с набором основных принципов, которые направляют все наши решения по разработке. Эти принципы, подробно описанные на нашем веб-сайт, гарантируем, что наш сервис останется удобным для разработчиков, безопасным и ориентированным на конфиденциальность пользователей.
Всегда дружелюбен к разработчикам, ориентирован на безопасность и прозрачен
Наш первый и главный принцип — создавать программное обеспечение, удобное для разработчиков, при этом сохраняя самые высокие стандарты безопасности и конфиденциальности. Мы считаем, что техническое совершенство никогда не должно идти в ущерб удобству использования, и что прозрачность укрепляет доверие в нашем сообществе.
Этот принцип проявляется в нашей подробной документации, четких сообщениях об ошибках и открытом общении как об успехах, так и о проблемах. Открывая исходный код всей нашей кодовой базы, мы приглашаем к проверке и сотрудничеству, укрепляя как наше программное обеспечение, так и более широкую экосистему.
Соблюдение проверенных временем принципов разработки программного обеспечения
Мы следуем нескольким устоявшимся принципам разработки программного обеспечения, которые доказали свою ценность на протяжении десятилетий:
- MVC: Разделение интересов с помощью шаблона Модель-Представление-Контроллер
- Философия Unix: Создание модульных компонентов, которые хорошо выполняют одну задачу
- KISS: Сохраняя простоту и ясность
- DRY: Не повторяйтесь, продвижение повторного использования кода
- YAGNI: Вам это не понадобится, избегая преждевременной оптимизации
- Двенадцать Факторов: Следование лучшим практикам создания современных масштабируемых приложений
- бритва Оккама: Выбор наиболее простого решения, отвечающего требованиям
- Догфудинг: Широкое использование нашей собственной продукции
Эти принципы — не просто теоретические концепции, они встроены в нашу ежедневную практику разработки. Например, наша приверженность философии Unix очевидна в том, как мы структурировали наши пакеты npm: небольшие, сфокусированные модули, которые можно объединять для решения сложных проблем.
Ориентирован на скрап-разработчиков, которые не умеют работать самостоятельно
Мы специально нацелены на неорганизованных, неорганизованных и рамен-выгодно разработчик. Этот фокус формирует все: от нашей модели ценообразования до наших технических решений. Мы понимаем трудности создания продуктов с ограниченными ресурсами, потому что мы сами через это прошли.
Этот принцип особенно важен в нашем подходе к открытому исходному коду. Мы создаем и поддерживаем пакеты, которые решают реальные проблемы для разработчиков без корпоративных бюджетов, делая мощные инструменты доступными для всех, независимо от их ресурсов.
Принципы на практике: кодовая база для пересылки электронных писем
Эти принципы четко видны в кодовой базе Forward Email. Наш файл package.json раскрывает продуманный выбор зависимостей, каждая из которых выбрана для соответствия нашим основным ценностям:
- Пакеты, ориентированные на безопасность, такие как
mailauth
для аутентификации по электронной почте - Удобные для разработчиков инструменты, такие как
preview-email
для более легкой отладки - Модульные компоненты, такие как различные
p-*
коммунальные услуги от Sindre Sorhus
Последовательно следуя этим принципам на протяжении долгого времени, мы создали сервис, которому разработчики могут доверять свою инфраструктуру электронной почты — безопасный, надежный и соответствующий ценностям сообщества разработчиков ПО с открытым исходным кодом.
Конфиденциальность по замыслу
Конфиденциальность — это не второстепенная идея или маркетинговая функция для пересылки электронной почты, а основополагающий принцип проектирования, который определяет каждый аспект нашего сервиса и кода:
- Шифрование с нулевым доступом: Мы внедрили системы, которые делают технически невозможным чтение электронных писем пользователей.
- Минимальный сбор данных: Мы собираем только те данные, которые необходимы для предоставления наших услуг, и ничего более.
- Прозрачная политика: Наша политика конфиденциальности написана ясным и понятным языком без использования юридического жаргона.
- Проверка открытого исходного кода: Наша открытая кодовая база позволяет исследователям безопасности проверять наши заявления о конфиденциальности.
Это обязательство распространяется и на наши пакеты с открытым исходным кодом, которые изначально разработаны с учетом лучших практик безопасности и конфиденциальности.
Устойчивый открытый исходный код
Мы считаем, что ПО с открытым исходным кодом нуждается в устойчивых моделях для долгосрочного процветания. Наш подход включает:
- Коммерческая поддержка: Премиальная поддержка и услуги по нашим инструментам с открытым исходным кодом.
- Сбалансированное лицензирование: Использование лицензий, защищающих как свободы пользователя, так и устойчивость проекта.
- Взаимодействие с сообществом: Активное взаимодействие с участниками для создания поддерживающего сообщества.
- Прозрачные дорожные карты: Делимся нашими планами развития, чтобы пользователи могли планировать соответствующим образом.
Сосредоточившись на устойчивом развитии, мы гарантируем, что наши вклады в разработку программного обеспечения с открытым исходным кодом будут продолжать расти и совершенствоваться с течением времени, а не будут заброшены.
Цифры не лгут: наша ошеломляющая статистика загрузки npm
Когда мы говорим о влиянии программного обеспечения с открытым исходным кодом, статистика загрузок дает ощутимую меру принятия и доверия. Многие из пакетов, которые мы помогаем поддерживать, достигли масштабов, которых мало кто из проектов с открытым исходным кодом достигает, с общим количеством загрузок, исчисляемым миллиардами.
[!ВАЖНО] Хотя мы гордимся тем, что помогаем поддерживать несколько высокозагружаемых пакетов в экосистеме JavaScript, мы хотим признать, что многие из этих пакетов изначально были созданы другими талантливыми разработчиками. Такие пакеты, как superagent и supertest, изначально были созданы TJ Holowaychuk, чей плодотворный вклад в открытый исходный код сыграл важную роль в формировании экосистемы Node.js.
Взгляд с высоты птичьего полета на наше влияние
Всего за два месяца с февраля по март 2025 года основные пакеты, в которые мы вносим свой вклад и помогаем поддерживать, зафиксировали ошеломляющие показатели загрузок:
- SuperAgent: 84,575,829 загрузок[^7] (первоначально создано TJ Holowaychuk)
- супер тест: 76,432,591 загрузок[^8] (первоначально создано TJ Holowaychuk)
- также: 28 539 295 загрузок[^34] (первоначально создано TJ Holowaychuk)
- @koa/маршрутизатор: 11,007,327 загрузок[^35]
- koa-маршрутизатор: 3,498,918 загрузок[^36]
- URL-регулярное выражение: 2,819,520 загрузок[^37]
- предварительный просмотр-электронная почта: 2,500,000 загрузок[^9]
- кабина: 1,800,000 загрузок[^10]
- @breejs/позже: 1,709,938 загрузок[^38]
- email-шаблоны: 1,128,139 загрузок[^39]
- получить-пути: 1,124,686 загрузок[^40]
- URL-регулярное выражение-безопасно: 1,200,000 загрузок[^11]
- dotenv-parse-переменные: 894,666 загрузок[^41]
- @koa/multer: 839,585 загрузок[^42]
- спам-сканер: 145 000 загрузок[^12]
- Бри: 24,270 загрузок[^30]
[!ПРИМЕЧАНИЕ] Несколько других пакетов, которые мы помогаем поддерживать, но не создавали, имеют еще большее количество загрузок, включая
form-data
(738M+ загрузок),toidentifier
(309M+ загрузок),stackframe
(более 116 млн загрузок) иerror-stack-parser
(113M+ загрузок). Для нас большая честь внести свой вклад в эти пакеты, уважая при этом работу их оригинальных авторов.
Это не просто впечатляющие цифры — они представляют реальных разработчиков, решающих реальные проблемы с кодом, который мы помогаем поддерживать. Каждая загрузка — это пример того, как эти пакеты помогли кому-то создать что-то значимое, от любительских проектов до корпоративных приложений, используемых миллионами.
Ежедневное воздействие в масштабе
Ежедневные шаблоны загрузок показывают постоянное, высокообъемное использование, с пиками, достигающими миллионов загрузок в день[^13]. Эта последовательность говорит о стабильности и надежности этих пакетов — разработчики не просто пробуют их; они интегрируют их в свои основные рабочие процессы и полагаются на них изо дня в день.
Еженедельные шаблоны загрузок показывают еще более впечатляющие цифры, постоянно колеблясь около десятков миллионов загрузок в неделю[^14]. Это представляет собой огромный след в экосистеме JavaScript, поскольку эти пакеты работают в производственных средах по всему миру.
За пределами голых цифр
Хотя статистика загрузок сама по себе впечатляет, она рассказывает более глубокую историю о доверии, которое сообщество оказывает этим пакетам. Поддержание пакетов в таком масштабе требует непоколебимой приверженности:
- Обратная совместимость: Изменения должны быть тщательно продуманы, чтобы не нарушить существующие реализации.
- Безопасность: Поскольку от этих пакетов зависят миллионы приложений, уязвимости безопасности могут иметь далеко идущие последствия.
- Производительность: В этом масштабе даже незначительные улучшения производительности могут иметь значительные совокупные преимущества.
- Документация: Понятная и исчерпывающая документация необходима для пакетов, используемых разработчиками всех уровней опыта.
Постоянный рост числа загрузок с течением времени отражает успешное выполнение этих обязательств и укрепление доверия со стороны сообщества разработчиков посредством надежных, хорошо поддерживаемых пакетов.
Поддержка экосистемы: наше спонсорство открытого исходного кода
[!СОВЕТ] Устойчивость открытого исходного кода заключается не только в предоставлении кода, но и в поддержке разработчиков, которые поддерживают критически важную инфраструктуру.
Помимо наших прямых вкладов в экосистему JavaScript, мы гордимся тем, что спонсируем выдающихся участников Node.js, чья работа составляет основу многих современных приложений. Наши спонсорства включают:
Андрис Рейнман: пионер инфраструктуры электронной почты
Андрис Рейнман является создателем Почтовая программа заметок, самая популярная библиотека отправки электронной почты для Node.js с более чем 14 миллионами еженедельных загрузок[^15]. Его работа распространяется на другие критические компоненты инфраструктуры электронной почты, такие как SMTP-сервер, Mailparser, а также WildDuck.
Наша спонсорская поддержка помогает обеспечить постоянное обслуживание и развитие этих важнейших инструментов, обеспечивающих обмен электронными письмами для бесчисленных приложений Node.js, включая нашу собственную службу пересылки электронной почты.
Синдре Сорхус: вдохновитель служебных пакетов
Синдре Сорхус является одним из самых плодовитых разработчиков открытого исходного кода в экосистеме JavaScript, имея на своем счету более 1000 пакетов npm. Его утилиты, такие как p-карта, p-повторить попытку, а также is-поток являются фундаментальными строительными блоками, используемыми во всей экосистеме Node.js.
Спонсируя работу Синдре, мы помогаем поддерживать разработку этих важнейших утилит, которые делают разработку на JavaScript более эффективной и надежной.
Эти спонсорские соглашения отражают нашу приверженность более широкой экосистеме открытого исходного кода. Мы осознаем, что наш собственный успех строится на фундаменте, заложенном этими и другими участниками, и мы стремимся обеспечить устойчивость всей экосистемы.
Выявление уязвимостей безопасности в экосистеме JavaScript
Наша приверженность открытому исходному коду выходит за рамки разработки функций и включает в себя выявление и устранение уязвимостей безопасности, которые могут повлиять на миллионы разработчиков. Некоторые из наших наиболее значительных вкладов в экосистему JavaScript были в сфере безопасности.
Спасение Коа-Роутера
В феврале 2019 года Ник выявил критическую проблему с обслуживанием популярного пакета koa-router. Когда он сообщил о Hacker News, первоначальный разработчик пакета отказался от него, оставив уязвимости безопасности неустраненными, а сообщество — без обновлений.
[!ВНИМАНИЕ] Заброшенные пакеты с уязвимостями безопасности представляют значительную угрозу для всей экосистемы, особенно если их загружают миллионы раз в неделю.
В ответ Ник создал @koa/маршрутизатор и помог предупредить сообщество о ситуации. С тех пор он поддерживает этот критически важный пакет, гарантируя пользователям Koa безопасное, хорошо поддерживаемое решение маршрутизации.
Устранение уязвимостей ReDoS
В 2020 году Ник выявил и устранил критическую проблему Отказ в обслуживании с использованием регулярных выражений (ReDoS) уязвимость в широко используемом url-regex
Пакет. Эта уязвимость (SNYK-JS-URLREGEX-569472) может позволить злоумышленникам вызвать отказ в обслуживании, предоставив специально созданные входные данные, которые вызовут катастрофический возврат в регулярном выражении.
Вместо того, чтобы просто исправить существующий пакет, Ник создал url-regex-safe
, полностью переписанная реализация, которая устраняет уязвимость, сохраняя совместимость с исходным API. Он также опубликовал всеобъемлющий пост в блоге объяснение уязвимости и способов ее смягчения.
Эта работа демонстрирует наш подход к безопасности: не просто устранение проблем, но и обучение сообщества и предоставление надежных альтернатив, которые предотвратят возникновение подобных проблем в будущем.
Отстаивание безопасности Node.js и Chromium
Ник также активно выступал за улучшение безопасности в более широкой экосистеме. В августе 2020 года он выявил существенную проблему безопасности в Node.js, связанную с обработкой заголовков HTTP, о которой сообщалось в Регистр.
Эта проблема, возникшая из-за патча в Chromium, потенциально может позволить злоумышленникам обойти меры безопасности. Пропаганда Ника помогла обеспечить быстрое решение проблемы, защитив миллионы приложений Node.js от потенциальной эксплуатации.
Обеспечение безопасности инфраструктуры npm
Позже в том же месяце Ник выявил еще одну критическую проблему безопасности, на этот раз в инфраструктуре электронной почты npm. Как сообщается в Регистрnpm не реализовал должным образом протоколы аутентификации электронной почты DMARC, SPF и DKIM, что потенциально позволяло злоумышленникам отправлять фишинговые письма, которые выглядели как отправленные от npm.
Отчет Ника привел к улучшению положения дел в области безопасности электронной почты npm, что позволило защитить миллионы разработчиков, использующих npm для управления пакетами, от потенциальных фишинговых атак.
Наш вклад в экосистему пересылки электронной почты
Forward Email создан на основе нескольких критических проектов с открытым исходным кодом, включая Nodemailer, WildDuck и mailauth. Наша команда внесла значительный вклад в эти проекты, помогая выявлять и устранять глубокие проблемы, которые влияют на доставку и безопасность электронной почты.
Улучшение основных функций Nodemailer
Почтовая программа заметок является основой отправки электронной почты в Node.js, и наш вклад помог сделать ее более надежной:
- Улучшения SMTP-сервера: Мы исправили ошибки синтаксического анализа, проблемы с обработкой потоков и проблемы с настройкой TLS в компоненте SMTP-сервера[^16][^17].
- Улучшения почтового парсера: Мы устранили ошибки декодирования последовательности символов и устранили проблемы с парсером, которые могли привести к сбоям обработки электронной почты[^18][^19].
Эти вклады гарантируют, что Nodemailer останется надежной основой для обработки электронной почты в приложениях Node.js, включая пересылку электронной почты.
Расширение аутентификации электронной почты с помощью Mailauth
Майлаут обеспечивает критически важную функциональность аутентификации электронной почты, и наш вклад значительно улучшил ее возможности:
- Улучшения проверки DKIM: Мы обнаружили и сообщили, что у X/Twitter возникли проблемы с кэшем DNS, из-за которых произошел сбой DKIM для исходящих сообщений, сообщив об этом на Hacker One[^20].
- Улучшения DMARC и ARC: Мы исправили проблемы с проверкой DMARC и ARC, которые могли приводить к неверным результатам аутентификации[^21][^22].
- Оптимизация производительности: Мы внесли улучшения, которые повышают производительность процессов аутентификации электронной почты[^23][^24][^25][^26].
Эти улучшения помогают гарантировать точность и надежность аутентификации электронной почты, защищая пользователей от фишинговых и спуфинговых атак.
Ключевые улучшения времени безотказной работы
Наш вклад в Upptime включает:
- Мониторинг SSL-сертификатов: Мы добавили функцию отслеживания истечения срока действия SSL-сертификата, предотвращая неожиданные простои из-за истекших сертификатов[^27].
- Поддержка нескольких номеров SMS: Мы реализовали поддержку оповещения нескольких членов команды с помощью SMS при возникновении инцидентов, что позволило сократить время реагирования[^28].
- Исправления проверки IPv6: Мы исправили проблемы с проверкой подключения IPv6, обеспечив более точный мониторинг в современных сетевых средах[^29].
- Поддержка темного/светлого режима: Мы добавили поддержку тем, чтобы улучшить пользовательский опыт на страницах статуса[^31].
- Лучшая поддержка TCP-Ping: Мы улучшили функциональность TCP-пинга, чтобы обеспечить более надежное тестирование соединения[^32].
Эти улучшения не только улучшают мониторинг статуса Forward Email, но и доступны всему сообществу пользователей Upptime, демонстрируя нашу приверженность совершенствованию инструментов, от которых мы зависим.
Клей, который держит все вместе: масштабируемый пользовательский код
Хотя наши пакеты npm и вклад в существующие проекты значительны, именно пользовательский код, который интегрирует эти компоненты, действительно демонстрирует нашу техническую экспертизу. Кодовая база Forward Email представляет собой десятилетие усилий по разработке, начиная с 2017 года, когда проект начинался как бесплатная пересылка электронной почты до объединения в монорепозиторий.
Масштабные усилия по развитию
Масштаб этого кода пользовательской интеграции впечатляет:
- Всего взносов: Более 3217 коммитов
- Размер кодовой базы: Более 421 545 строк кода в файлах JavaScript, Pug, CSS и JSON[^33]
Это представляет собой тысячи часов разработки, сеансов отладки и оптимизации производительности. Это «секретный соус», который превращает отдельные пакеты в целостный, надежный сервис, используемый тысячами клиентов ежедневно.
Интеграция основных зависимостей
Кодовая база Forward Email объединяет многочисленные зависимости в единое целое:
- Обработка электронной почты: Интегрирует Nodemailer для отправки, SMTP-сервер для получения и Mailparser для анализа
- Аутентификация: Использует Mailauth для проверки DKIM, SPF, DMARC и ARC
- Разрешение DNS: Использует Tangerine для DNS-over-HTTPS с глобальным кэшированием
- МХ-соединение: Использует mx-connect с интеграцией Tangerine для надежного подключения к почтовому серверу
- Планирование работы: Использует Bree для надежной обработки фоновых задач с рабочими потоками
- Шаблонирование: Использует шаблоны электронной почты для повторного использования таблиц стилей с веб-сайта в коммуникациях с клиентами.
- Хранение электронной почты: Реализует индивидуально зашифрованные почтовые ящики SQLite с использованием better-sqlite3-multiple-ciphers с шифрованием ChaCha20-Poly1305 для квантово-безопасной конфиденциальности, гарантируя полную изоляцию между пользователями и то, что только пользователь имеет доступ к своему почтовому ящику
Каждая из этих интеграций требует тщательного рассмотрения пограничных случаев, последствий для производительности и проблем безопасности. Результатом является надежная система, которая надежно обрабатывает миллионы транзакций электронной почты. Наша реализация SQLite также использует msgpackr для эффективной двоичной сериализации и WebSockets (через ws) для обновления статуса в реальном времени по всей нашей инфраструктуре.
Инфраструктура DNS с Tangerine и mx-connect
Важнейшим компонентом инфраструктуры Forward Email является наша система разрешения DNS, построенная на основе двух ключевых пакетов:
-
мандарин: Наша реализация DNS-over-HTTPS на базе Node.js представляет собой готовую замену стандартному DNS-резолверу со встроенными повторными попытками, тайм-аутами, интеллектуальной ротацией серверов и поддержкой кэширования.
-
MX-подключение: Этот пакет устанавливает TCP-подключения к MX-серверам, беря целевой домен или адрес электронной почты, разрешая соответствующие MX-серверы и подключаясь к ним в порядке приоритета.
Мы интегрировали Tangerine с mx-connect через запрос на извлечение №4, обеспечивая DNS-запросы на уровне приложений по HTTP-запросам во всей пересылке электронной почты. Это обеспечивает глобальное кэширование для DNS в масштабе с согласованностью 1:1 в любом регионе, приложении или процессе — критически важно для надежной доставки электронной почты в распределенной системе.
Влияние на предприятие: от открытого исходного кода до критически важных решений
Кульминация нашего десятилетнего пути в разработке ПО с открытым исходным кодом позволила Forward Email обслуживать не только отдельных разработчиков, но и крупные предприятия и образовательные учреждения, которые составляют костяк самого движения с открытым исходным кодом.
Практические примеры критически важной инфраструктуры электронной почты
Наша приверженность принципам надежности, конфиденциальности и открытого исходного кода сделала Forward Email надежным выбором для организаций с высокими требованиями к электронной почте:
-
Образовательные учреждения: Как подробно описано в нашем пример пересылки писем выпускникамКрупнейшие университеты полагаются на нашу инфраструктуру для поддержания постоянных связей с сотнями тысяч выпускников посредством надежных служб пересылки электронной почты.
-
Корпоративные Linux-решения: Пример использования корпоративной электронной почты Canonical Ubuntu демонстрирует, как наш подход с открытым исходным кодом идеально соответствует потребностям поставщиков корпоративного Linux, предлагая им необходимую прозрачность и контроль.
-
Фонды с открытым исходным кодом: Возможно, наиболее показательным является наше партнерство с Linux Foundation, как это зафиксировано в Пример использования электронной почты в корпоративной среде Linux Foundation, где наш сервис обеспечивает коммуникацию для той самой организации, которая курирует разработку Linux.
Есть прекрасная симметрия в том, как наши пакеты с открытым исходным кодом, которые тщательно поддерживались в течение многих лет, позволили нам создать службу электронной почты, которая теперь поддерживает те самые сообщества и организации, которые отстаивают программное обеспечение с открытым исходным кодом. Этот путь полного круга — от предоставления отдельных пакетов до поддержки инфраструктуры электронной почты корпоративного уровня для лидеров программного обеспечения с открытым исходным кодом — представляет собой окончательное подтверждение нашего подхода к разработке программного обеспечения.
Десятилетие открытого исходного кода: взгляд в будущее
Оглядываясь на десятилетие работы над проектами с открытым исходным кодом и глядя вперед на следующие десять лет, мы испытываем благодарность к сообществу, которое поддерживало нашу работу, и волнение в ожидании того, что нас ждет дальше.
Наш путь от отдельных разработчиков пакетов до тех, кто поддерживает комплексную инфраструктуру электронной почты, используемую крупными предприятиями и фондами с открытым исходным кодом, был замечательным. Это свидетельство силы разработки с открытым исходным кодом и влияния, которое продуманное, хорошо поддерживаемое программное обеспечение может оказать на более широкую экосистему.
В ближайшие годы мы намерены:
- Продолжаем поддерживать и улучшать наши существующие пакеты, гарантируя, что они останутся надежными инструментами для разработчиков по всему миру.
- Расширение нашего вклада в критически важные инфраструктурные проекты, особенно в области электронной почты и безопасности.
- Расширение возможностей пересылки электронной почты сохраняя при этом нашу приверженность принципам конфиденциальности, безопасности и прозрачности.
- Поддержка следующего поколения разработчиков ПО с открытым исходным кодом посредством наставничества, спонсорства и взаимодействия с сообществом.
Мы считаем, что будущее разработки программного обеспечения открыто, совместно и основано на доверии. Продолжая вносить высококачественные пакеты, ориентированные на безопасность, в экосистему JavaScript, мы надеемся сыграть небольшую роль в построении этого будущего.
Спасибо всем, кто использовал наши пакеты, вносил вклад в наши проекты, сообщал о проблемах или просто распространял информацию о нашей работе. Ваша поддержка сделала возможным это десятилетие воздействия, и мы с нетерпением ждем, чего мы сможем достичь вместе за следующие десять лет.
[^1]: статистика загрузок npm для cabin, апрель 2025 г. [^2]: статистика загрузок npm для bson-objectid, февраль-март 2025 г. [^3]: статистика загрузок npm для url-regex-safe, апрель 2025 г. [^4]: количество звезд GitHub для forwardemail/forwardemail.net по состоянию на апрель 2025 г. [^5]: статистика загрузок npm для preview-email, апрель 2025 г. [^7]: статистика загрузок npm для superagent, февраль-март 2025 г. [^8]: статистика загрузок npm для supertest, февраль-март 2025 г. [^9]: статистика загрузок npm для preview-email, февраль-март 2025 г. [^10]: статистика загрузок npm для cabin, февраль-март 2025 г. [^11]: статистика загрузок npm для url-regex-safe, Февраль-март 2025 г. [^12]: статистика загрузок npm для spamscanner, февраль-март 2025 г. [^13]: ежедневные шаблоны загрузок из статистики npm, апрель 2025 г. [^14]: еженедельные шаблоны загрузок из статистики npm, апрель 2025 г. [^15]: статистика загрузок npm для nodemailer, апрель 2025 г. [^16]: https://github.com/nodemailer/smtp-server/issues/155 [^17]: https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min [^18]: https://github.com/nodemailer/mailparser/issues/261 [^19]: https://github.com/nodemailer/nodemailer/issues/1102 [^20]: https://github.com/postalsys/mailauth/issues/30 [^21]: https://github.com/postalsys/mailauth/issues/58 [^22]: https://github.com/postalsys/mailauth/issues/48 [^23]: https://github.com/postalsys/mailauth/issues/74 [^24]: https://github.com/postalsys/mailauth/issues/75 [^25]: https://github.com/postalsys/mailauth/issues/60 [^26]: https://github.com/postalsys/mailauth/issues/73 [^27]: На основе проблем GitHub в репозитории Upptime [^28]: На основе проблем GitHub в репозитории Upptime [^29]: На основе проблем GitHub в репозитории Upptime [^30]: статистика загрузок npm для bree, февраль-март 2025 г. [^31]: На основе запросов на извлечение GitHub в Upptime [^32]: На основе запросов на извлечение GitHub в Upptime [^34]: статистика загрузок npm для koa, февраль-март 2025 г. [^35]: статистика загрузок npm для @koa/router, февраль-март 2025 г. [^36]: статистика загрузок npm для koa-router, февраль-март 2025 г. [^37]: статистика загрузок npm для url-regex, февраль-март 2025 г. [^38]: статистика загрузок npm для @breejs/later, февраль-март 2025 г. [^39]: статистика загрузок npm для email-templates, февраль-март 2025 г. [^40]: статистика загрузок npm для get-paths, февраль-март 2025 г. [^41]: статистика загрузок npm для dotenv-parse-variables, февраль-март 2025 г. [^42]: статистика загрузок npm для @koa/multer, февраль-март 2025 г.