Летние каникулы Ember

Обычно, летом во многом наблюдается спад активности (отпуск, отдых и т.д). Но для EmberJS это не так. Вышедшая 12 июня версия 1.13.0 (и 2.0-beta) дали старт летнему марафону на пути к 2.0-stable (не только для самого EmberJS, но и для ember-cli, ember-data и т.д). И понеслась:

  • 17 июня — 1.13.1
  • 18 июня — 1.13.2
  • 6 июля — 1.13.3
  • 14 июля — 1.13.4
  • 20 июля — 1.13.5
  • 31 июля — 1.13.6
  • 9 августа — 1.13.7
  • 13 августа — 1.13.8 (и 2.0)
  • 22 августа — 1.13.9

И параллельно с этим выпускались релизы 2.0-beta. Вести разработку чего-либо с поддержкой последней версии EmberJS этим летом было очень непростой задачей. Раз в неделю-две выходила новая версия и процесс сноса старой/наката новой версии был доведен почти до автоматизма. Куда «веселее» обстояли дела с появлением новых фич и новых «deprecations». Тут я рассмотрю более детально (оригинал) те вещи, с которыми столкнулся:

  • Ember.keys — устарел в угоду Object.keys. Переход на новый синтаксис не составляет труда (можно автозаменой).
  • Ember.oneWay — устарел в угоду Ember.computed.oneWay. Переход на новый синтаксис не составляет труда (можно автозаменой).
  • Ember.View. Вместо view рекомендуется использовать Ember.Component. Переход на новый синтаксис требует тщательного тестирования. Если переход на компоненты нежелателен или невозможен, то рекомендуется использовать дополнение ember-legacy-views.
  • Ember.LinkView (как View) устарел в пользу Ember.LinkComponent.
  • Ember.Select так же не обошла участь был устаревшим. По ссылке выше есть простой вариант реализации компонента (кто б сомневался :)) на основе тега select.
  • Controller.needs устарело в пользу Ember.inject.controller. Переход на новый синтаксис не составляет труда, если у вас в коде needs ни разу не был объявлен как computedProperty (а вот у меня в одном проекте был).
  • Ember.Obrserver и порядок аргументов. До выхода этого deprecation’а даже не знал, что в Ember.Observer функцию можно писать первой, а не последней. Теперь уже не рекомендуется.
  • createWithMixins — в свое время пришел вместо create для ситуаций, когда сущность создавать вместе с примесями. Сейчас устарел в пользу Ember.Object.extend({/* ... */}).create();. Переход на новый синтаксис не вызывает трудностей. Требуется лишь внимательность и покрытие кода тестами.
  • bind-attr — когда-то был в виде bindAttr, а теперь и вовсе «ушел на покой». Вместо него рекомендуется писать атрибут как в обычном HTML, но в значение ставить {{someVal}} (именно с фигурными скобками). Для перехода на новый синтаксис необходимо немного поработать ручками в шаблонах.
  • Ember.computed.any устарел в пользу Ember.computed.or. Одно ключевое поменялось на другое. Переход на новый синтаксис делается через автозамену.
  • Много методов по созданию handlebars/htmlbars helpers устарели в пользу Ember.Helper.helper (см. 1.13.6 changelog). Автозамена позволяет обновить код без проблем.
  • computed для foo.@each наконец-то выдает предупреждение о целесообразности использования foo.[] (см. 1.13.7 changelog). Ручками все можно заменить без проблем.
  • Довольно внезапно (но, к счастью, в 2.0+) стал устаревшим Ember.String.fmt в угоду «ES6 template strings».

В какой-то прекрасный момент (возможно даже с самого начала лета) разработчики Ember’a поняли, что для многих «пользователей» их продукта может быть весьма затруднительным и отталкивающим процесс отлова deprecation’ов и переход на новые фичи. Вот для таких людей и был написан небольшой ember-addon под названием deprecation-workflow. Детальное описание его использования есть в README.md. Если в коротко — то аддон позволяет убрать кучу warning’ов из консоли и выводить только те, которые относятся к выбранным deprecation’ам. Так один за другим можно почистить все места с устаревшем кодом. Могу сказать, то получается куда лучше, чем когда сам перебираешь сотни сообщений в консоли. Работает этот аддон используя Ember.Debug.registerDeprecationHandler, который официально анонсировали в Ember 2.1-beta. Хитрюги 🙂

Хм.. Обычно новые версии — это не только «устаревания», но и новые фишечки. И за ними тоже надо следить, дабы «быть в теме». И так:

  • В 1.13 появился Glimmer, который работает ну очень круто. Если хотите почувствовать разницу, то рекомендую сравнить ember-models-table версий 1.0.0+ и 0.1.2 (в 1.0.0 как раз был переход на Ember 1.13.*) в плане отрисовки таблиц на 1000+ элементов.

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

  • Все уже начали использовать «новый» синтаксис getter/setter для computedProperties? А ведь он появился в версии 1.12. Да, так как ember-cli использует babel, то в целом полезно ознакомиться и принять на вооружение возможности ES6.
  • А inline if уже прочно засел в вашем коде (1.11)?
  • componenthelper так же не нов (1.11).
  • Из совсем нового (2.0+), но весьма ожидаемого — get-helper и each-in helper. Оба анонсированы в 2.1-beta, но были доступны и в 2.0 (Yehuda Katz врать не будет). Да, автором get-helper’a является jmurphyau, который в свое время реализовал данный функционал в виде addon — ember-get-helper. И вот, его код попал в ядро EmberJS. Достойная награда за проделанную работу (без шуток).

Как бы не было тяжело (лень, нет времени, другие задачи и т.д), но надо стараться поддерживать версию Ember для своих проектов в актуальном состоянии. Помимо плюсов в виде улучшающегося кода/функционала есть еще такая штука как ember addons. А там ведь можно найти много полезных компонентов, хэлперов, сервисов и т.д., которые автономны, покрыты тестами и поддерживаются сообществом разработчиков.

Получился такой немного сумбурный обзор о чудных летний каникулах Ember, которые прошли в подготовке к релизу 2.0.

, , ,

Оставить комментарий

Top ↑ | Main page | Back