Про версии Angular-а

19 апреля 2017г.  angular     frontend     framework     upgrade     angularjs   


В данной заметке хотелось бы разобрать неразбериху с версиями фреймворка Angular и разобрать самые частые вопросы. Почему разработчики с опытом Angular 2 так неохотно откликаются на вакансии Angular 1.x? Какая версия текущая? При поиске разработчика, какую версию стоит указать? Почему после второй версии выпустили сразу третью?


Intro

Если вам не очень интересно "почему", а интересуют ответы на вопросы в анонсе статьи, то вот небольшой FAQ:

Так как называть фреймворк правильно?
Просто Angular, если вы обсуждаете сам фреймворк или составляете вакансию на проект, где используется Angular 2 или выше. Говорите Angular 1, 2 или 4, если обсуждаете конкретную фичу или специфику API.
Какая текущая версия фреймворка?
На момент написания статьи, текущая версия - 4. Ближайший мажорный релиз должен состояться в сентябре-октябре 2016 года, ожидается выход Angular 5. Шестую версию стоит ждать не ранее марта 2017 года.
А я вот часто видел упоминание AngularJS без указания версии. Это то же самое, что и Angular?
Название AngularJS закрепилось за первой версии фреймворка. Для избежания путаницы, лучше не использовать его, но имейте в виду, что скорее всего подразумевается именно Angular 1.
Не могу найти документацию по 3 версии. Я ничего не упустил?
Третьей версии не было, и не ищите. Причины указаны ниже.

Семантическое версионирование и переход с Angular 1 на Angular 2

Прежде чем продолжать разбираться в чехарде версий Angular-а, стоит сперва познакомиться со спецификацией Семантического Версионирования (SEMVER). Не пугайтесь, достаточно будет краткого изложения.

Номер версии строится из трех компонент: МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ. Разработчику следует увеличивать компоненты версии в зависимости от следующего правила:

  • МАЖОРНУЮ версию, когда сделаны обратно несовместимые изменения API.
  • МИНОРНУЮ версию, когда добавлен новый функционал без нарушения обратной совместимости.
  • ПАТЧ-версию, когда сделаны обратно совместимые исправления.

Разработчики Angular при разработке второй версии создали множество критических изменений, практически переписав весь фреймворк с нуля. API 1 и 2 версии оказался фактически не совместимым. Хотя в официальной документации до сих пор можно найти документацию по переходу с "Angular 1.x на Angular". Вы наверное заметили, что в статье упоминается AngularJS. Исторически сложилось, что это название закрепилось за Angular 1 и обычно подразумевается оно. Поэтому, лично к вам просьба, не вносить сумятицы и не использовать название AngularJS с версиями 2, 4 или др.

Переход на новый API не прошел безболезненно. И это привело к тому, что разработчикам Angular 1 пришлось слегка пострадать при переводе своего проекта (хотя я почти уверен, что большинство ничего переводить не стало и продолжает практиковать некромантию), переучиться и войти в 2017-ый год с более современной и развивающейся платформой. Но перспективность изучения Angular 1 для frontend-разработчиков, которые сразу начали свое знакомство с Angular 2 или 4, разумеется, никакая. Поэтому, самый лучший выход - это не ожидать от них симптомов "дауншифтера", а обновлять свой проект и идти в ногу со временем.

Где скачать Angular 3?

Немалую путаницу в головы внесла ситуация с внезапным пропуском Angular 3. Нет, это не боязнь троек в релизах (имени Гейба Ньюэлла) вдруг стала заразной. Дело в том, что сам по себе Angular состоит из разных модулей, которые распространяются как отдельные пакеты. И один из пакетов, конкретно @angular/router стал обгонять на одну мажорную версию остальные:


В результате такого несовпадения версий, менеджер пакетов NPM стал искать четвертую версию. В результате было принято решение в новом релизе использовать одну мажорную версию на все основные модули фреймворка. И так как откатывать версию роутера было нереально (это как минимум поломало бы сборки у всех, кто давно использует Angular 2), пришлось перескочить третью версию, чтобы в четвертой все было уже по уму.

Последствия и будущее

Те frontend-разработчики, которые перешли с Angular 2 на 4, наверняка обратили внимание, насколько плавным получился переход. Фактически, не пришлось менять код компонентов, конечно, если вы обращали внимание на предупреждения уровня deprecated и не злоупотребляли использованием deprecated фич.

Более всего этот переход затронул тех, кто использовал AngularCLI-rc.X и соответственно перешел на AngularCLI ^1.0.0. Но это немного другая тема.

В настоящее время разработчики Angular-а работают над созданием пятой версии фреймворка. Согласно их же планам, выпуски новых мажорных версий будут происходить более прозрачно и предсказуемо. Интервал выхода - каждые полгода. Также, если в будущих релизах планируется устранить какую-либо фичу, то она будет отмечена как Deprecated с соответствующими предупреждениями. Так что, у вас будет время подготовиться. Учитывая опыт с неудачным переходом с 1 на 2, есть некоторая уверенность, что подобное не повторится. По крайней мере, не с этим фреймворком.



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


По мотивам статьи: Просто Angular