Alibaba Node Enterprise Framework — Egg 10000 Star + 2 года ✨✨✨

Node.js Egg.js Открытый исходный код
Alibaba Node Enterprise Framework — Egg 10000 Star + 2 года ✨✨✨
"Удачи, ешьте яйца завтра утром. 』

Внизу есть культурное событие рубашки, чтобы пригласить вас принять участие.

В сентябре 2016 года мы объявили об открытом исходном коде Egg на JSConf China 2016, и с тех пор прошло 2 года.

существуетОбъявление о выпуске яйца 2.0Как уже упоминалось, основной код уже очень стабилен, и последующее внимание в основном сосредоточено наУлучшения для разработчиков.

EggЭто основная базовая структура Alibaba Node.js. Она ориентирована на область «базовой веб-инфраструктуры корпоративного уровня» и предоставляет «микроядро + механизм подключаемых модулей + возможности настройки инфраструктуры», что идеально обеспечивает баланс между экологическим взаимодействием. -Конструкция и дифференцированная настройка.

Он подходит не только для быстрой разработки личных небольших проектов, но также подходит для командных архитекторов для расширения фреймворка, подходящего для конкретных командных бизнес-сценариев, на базе Egg на основе собственной технической архитектуры.

Это обусловлено обширным опытом инженерной практики Али в различных областях различных отраслей промышленности и на протяжении многих лет стабильно поддерживало продвижение Tmall Double 11 с высоким трафиком.

Далее я поделюсь с вами некоторыми результатами и данными за последние 9 месяцев.Эта статья длинная, пожалуйста, наслаждайтесь ею медленно:

  • Обмен данными разработчиков
  • приглашение на культурное мероприятие
  • Оптимизация опыта разработчиков
    • Поддержка TypeScript
    • Добавлен «Жизненный цикл».
    • Руководство по доступу к алинодам
    • Взаимодействие с Java
    • Практический пример — рефакторинг сообщества cnode с помощью Egg
    • Упорядочить обмен опытом ORM от команды Yuque
    • Обмен опытом фронтенд-инжиниринга, например Webpack
    • RFC для обработки ошибок и opentracing
    • схема рефакторинга скелета egg-init
  • план на будущее

## данные разработчика

  • Официальный сайт PV составляет около 1,2 Вт.
  • Существует 1006 яичных модулей npm и 3738 зависимостей GitHub.
  • Более тысячи запросов на слияние, 2200 проблем и более 130 участников.
  • Всего выпущена 81 версия,Release Note.
  • Проекты общественной практики:cnodejs/egg-cnode,eggjs/awesome-egg
  • Знать столбец Node.jsВсего опубликовано 48 статей, 7600 подписок, данные по чтению неизвестны (Zhihu Creator Center не смотрит на нас свысока и не проходит внутреннее тестирование 😭).

Компании, использующие яйца, неполная статистика:

  • Глубина используемая: Али Баба, все люди живут, Netease Koala
  • Пользуйтесь и делитесь опытом: куда идти, благодаря трению, отзывам
  • Некоторые команды консультировались, чтобы прощупать почву, но я не знаю, приземлились ли они наконец: Meituan, Sina, Baidu, Tencent, YY и т. д.

Кстати, поделитесь cnpmСтатистические данные:


## Культурные мероприятия

Вы можете посетить следующую ссылку, чтобы поделиться своим практическим опытом,Есть шанс получить футболку с яйцом и сопутствующие аксессуары~

Кроме того, 10000-й Звездный одноклассник@zhyjor,Пожалуйста свяжитесь с нами.

Каким был EggJS в 2018 году? Как изменилось его восприятие?

## Оптимизация опыта разработчиков

Далее я поделюсь с вами некоторыми оптимизациями, которые мы сделали в «опыте разработчиков» за этот период времени.

### TypeScript

TypeScript был очень популярен в последние несколько лет.Его статическая проверка типов, интеллектуальные подсказки, удобство IDE и другие функции очень ценны для крупномасштабных приложений корпоративного уровня, и он считается одним из будущих JS корпоративного уровня. разработка.

Али давно практикует ТС, пять месяцев назад мы тоже поделились некоторыми из наших зрелых практик:

Tianzhu: когда Egg встречает TypeScript, собирайте чайное яйцо

большое спасибо

@ акридиновыйДальнейшие работы в этой области:

Этот блок все еще находится в стадии постоянной оптимизации. Заинтересованные студенты могут принять участие в следующих оптимизациях:

  • egg-ts-helper добавляет поддержку js, так что учащиеся, не являющиеся ts, также могут пользоваться бонусом Buffer в виде интеллектуальных подсказок и статических проверок.
  • Улучшите d.ts, который поставляется с плагином, чтобы облегчить работу других разработчиков.
  • Поделитесь своими обертками верхнего уровня, такими как регистрация маршрутов или АОП через декораторы. (Существует много внутренних практик, но консенсуса достигнуто не было)
PS: Сам Egg.js не будет переписываться с использованием TypeScript.Для самого фреймворка гибкость JS может упростить реализацию некоторых функций, и в нем нет такой сложной бизнес-логики.Приходите за дополнительной помощью.

### жизненный цикл

Перед яйцом доступно для небольших разработчиков крючком в начале периода запуска, только несколько бероэтарт.

благодарныйkillaguОдноклассники дополнили нас более подробным жизненным циклом.Соответствующие RFC и документы таковы:

// app.js
class AppBootHook {
  configDidLoad() {
    // Config, Plugin files have did load.
  }

  async didLoad() {
    // All files have did load, start plugin here.
  }

  async willReady() {
    // All plugins have started, can do some thing before app ready.
  }

  async didReady() {
    // Worker is ready, can do some things don't need to block the app boot.
  }

  async serverDidReady() {
    // Server is listening.
  }

  async beforeClose() {
    // Do some thing before app close.
  }
}

### Alinode

С развитием Node сегодня он все шире используется для разделения интерфейсов и серверов, разработки полного стека, клиентских инструментов и других областей.

Однако, по сравнению с активной разработкой прикладного уровня, его Runtime находится в состоянии черного ящика для большинства фронтенд-разработчиков, которое не было хорошо улучшено, что препятствует применению Node.js в бизнес-приложении и продвижении.

Как разработчик Node, самой большой головной болью являются необъяснимые 100% CPU и OOM, вызванные утечками памяти.

К счастью, Alibaba Cloud

@Парк ЛингкомандаизПлатформа производительности Node.jsОбеспечивает разработчики узла:性能监控、安全提醒、故障排查、性能优化Он предоставляет комплексную цепочку инструментов и услуг, помогающих разработчикам быстро обнаруживать и локализовать онлайн-проблемы. За прошедшие годы он решил для нас множество онлайн-проблем и сопровождал наш бизнес.

Связанный обмен:

Конечно, в ежедневных вопросах и ответах многие студенты также выражали озабоченность по поводу безопасности данных. С моей личной точки зрения, все скрипты сбора Alinode имеют открытый исходный код и не будут собирать личные данные. Это действительно невозможно, его можно использовать в период стресс-теста, он определенно может спасти нас от небольшого выпадения волос, и совесть рекомендует это.

### Взаимодействие с Java

Node.js разрабатывается в Анте и Али уже четыре-пять лет, с самого начала как «игрушка для фронтенд-инженеров», до взлома сценариев Web и BFF и постепенного выхода в онлайн и даже некоторых профильных бизнесов. , это нелегко.

Оглядываясь назад, почему Nodejs выжил? Опираясь не только на: неблокирующий ввод-вывод, управляемый событиями, легкий вес, эти официально рекламируемые функции,Мы считаем, что более важным моментом является то, что мы открыли мост с Java и реализовали взаимосвязь, которая делает ее действительно интегрированной в техническую систему Али.

сопровождатьСтек технологий Java Ant SOFAМы также открыли модули, связанные с Nodejs RPC, в надежде заполнить пробел в сообществе Nodejs, а также подведем итоги и поделимся нашим опытом в области базовой технологии Nodejs за последние несколько лет.

Рекомендуется прочитать соответствующие научно-популярные статьи сестры Сяомарузи:

### egg-cnode

По инициативе мистера Пакаcnodejs/egg-cnodeПроект переписывает приложение сообщества cnode с помощью Egg.

В настоящее время завершил реконструкцию функциональных уровней и завершения испытательных случаев:

  • Уменьшение количества файлов 41, 22%
  • Количество строк кода уменьшилось на 2460 строк, снижение на 4,7%.
  • Код теста уменьшен на 980 строк, сокращение на 39%, а коэффициент покрытия выше, чем в исходном проекте.

В настоящее время еще есть много возможностей для оптимизации, потому что первый этап фокусируется на переносе функций и не делает больших оптимизаций. Некоторые методы использования не соответствуют лучшим практикам Egg. Заинтересованные студенты могут присоединиться и совершенствоваться вместе.

### Известные RFC и акции

В ежедневном сотрудничестве команда eggjs придерживается «асинхронной модели совместной работы на жестком диске на основе GitLab».
пройти черезissueИнициировать предложение RFC -> обсудить доработку -> отправить запрос на включение -> проверка кода -> опубликовать.
Это удобно для осадки, и даже разработчики, не участвовавшие в обсуждении на тот момент, могут потом сдать вопрос. Понять причину и следствие особенностей дизайна.

Θ отКоманда Юке Обмен практикой ORM

  • Yuque разработан на основе стека технологий Egg и является одним из немногих крупных Node-приложений, включающих различные технические моменты.
  • Документация по яйцу — Sequelize

Θ Обмен опытом фронтенд-инжиниринга, например Webpack

Θ Обработка ошибок и отслеживание проблем

Θ Оптимизация инструмента

Текущий egg-init имеет следующие проблемы:

  • Логика скаффолдинга централизована, все вegg-initСамо по себе, как глобальная команда, обновление неудобно.
  • Шаблоны не могут настраивать собственную логику и не могут совместно использовать код.
  • нет вспомогательного генератора, такого какegg-init add controller Testтакая функция.
  • Леса используются только при инициализации проекта, они не могут поддерживать функцию обновления, их легко разъедать и раскалывать.
  • Верхняя инкапсуляция неудобна и не поддерживает пресеты.

Следовательно, "[RFC] egg-init refactor ’, он должен быть завершен в следующем месяце и разослан всем.

Θ Популярная наука

Когда дело доходит до Egg, мы должны гордиться нашей документацией.Мы знаем, что фронтенд-разработчикам еще многое предстоит узнать о внутренних знаниях, и мы рады поделиться своими практиками:

pockry: Интервью с Dead Horse: Почему Egg.js — это корпоративная платформа Node.js

## план на будущее

Честно говоря, новых функций не так много, и вот почему: Egg использует«Микроядро + Плагины + Верхний фреймворк»модель.

Собственная итерация Egg использует механизм разработки плагинов, а функции разбросаны по разным модулям.Возможно, разработчики не могут воспринимать изменения его версии при его использовании, но на самом деле он всегда развивается. Каждую неделю могут появляться новые функции и выпуски исправлений ошибок, Egg - это скорее «реформатор», чем «реформатор», он будет продолжать развиваться в соответствии с предпосылкой совместимости.

Следующий план будет по-прежнему размещаться в "Оптимизация опыта разработчиков + обмен практическим опытом»аспект.

  • Рефакторинг и оптимизация тулчейна и скелета egg cli.
  • Продолжить оптимизацию TypeScript и добавить поддержку js project intellisense.
  • Больше практических проектов и научно-популярного обмена.
  • глобализация.

Нашей собственной энергии недостаточно, мы приглашаем всех участников сообщества присоединиться к нам и совместно способствовать развитию Node.


## напишите в конце

Если вам нравится яйцо, пожалуйста, поддержите нас:

  • Поделитесь этой статьей и поставьте лайк.
  • Приходите и поделитесь своей практикой, независимо от того, большая она или маленькая, это очень важно, спасибо, будет шанс получить нашу футболку.
Каким был EggJS в 2018 году? Как изменилось его восприятие?
  • Если вам понравилась моя статья, подписывайтесьмоя чжихуа такжеFollow GitHub
  • Игра Гуанчжоу Али, рекрутинговый интерфейс, знакомый с динамическими эффектами, скорость узла ~