Comments 102
По-поводу экосистемы: да, это так. Впрочем коммьюинити пока хоть и небольшое, но очень активное, так что я думаю, что за этим дело не станет.
Я следил за его развитием с 0.10, и сейчас он превращается в раздутого мастодонта из-за самомнения Эвана (автора), достаточно почитать ишуи — человек не пытается слушать других, у него есть своя точка зрения на проект, и она уводит его из ниши, которую вуй идеально занимал — библиотека для rapid component development. API толще, тяжелее, появляются какие-то странные фичи, синтаксис внутри шаблонов перестает быть гомогенным и все больше напоминает первый ангуляр.
Идея, которая лежала за первыми версиями вуя, была прекрасна — это «the best API is no API». И микроядро довеском, где все остальное — отдельные модули, директивы и компоненты, что тоже прекрасно.
До первой версии все выглядело так, словно ты пользуешься встроенными инструментами языка: объекты это просто объекты, наследование — расширение прототипа (окей, Vue.extend работал как deep assign, но все равно это было очевидно), причем с добавлением маленьких приятных плюшек, аргументы для директив парсились как объекты или массивы (без фигурных скобок). А потом начался атас, Эван начал завидовать славе реакта с ангуляром (видимо, по причине упадка метеора, которым он занимался), и начал тащить из них фичи.
Это видно даже по постам в блоге:
Recently there has been a lot of discussion around the tooling hurdle when you start a React project. Luckily for Vue.js, all you need to do to start with a quick prototype is including it from a CDN via a script tag, so we’ve got that part covered.
или вот эта бессмысленная (в силу ложности утверждения — shouldComponentUpdate и иммутабельные структуры это дополнительные инструменты, а не обязаловка) язвительность:
No need for shouldComponentUpdate or immutable data structures — it just works.
Поэтому я настоятельно советую либо попытаться пообщаться с Эваном, чтобы помочь ему это увидеть, либо предпочесть решение с более взрослыми разработчиками за ним, которые делают фичи не из зависти к другим фреймворкам, а из осознанной необходимости в них.
Собственно, что вам не нравится помимо «язвительности» автора?
вуй-лоадер (для файлов .vue ) — очень странный ход, в реальности очень трудно держать большие шаблоны рядом с JS-кодом в одном файле, а маленькие шаблоны можно и в темплейт вставить (или внешней переменной)
элемент-директивы (компонент и директив всегда хватало за глаза, а вопрос перфоманса решался немного иначе)
транзишны — их можно было вкрячить куда аккуратнее (объективно можно было, не через глобальные переменные на строках)
фильтры — можно было отдельным модулем. Нахрена в любой проект тащить с собой фильтр для валют, например? В 0.12 и рядом с ним в базовой поставке был минимальный набор фильтров, который в 90% случаев использовался, а даже если нет — это были однострочники типа upperCase.
v-else объективно ОЧЕНЬ грязный хак.
v-for первым ввел дополнительный внутренний синтаксис, отличающийся от общепринятого. До 0.13, если не путаю, он был гомогенен с остальными директивами, используя нотацию обычного объекта без скобок — [key]: value. Потом Эван зачем-то решил заменить двоеточие на in, нахрена — не очень понятно, но теперь зато все как в ангуляре, а не как в остальных директивах либы. Эту боль можно было решить при помощи фильтра, но почему-то никто тогда об этом ему не сказал.
События — какой-то ад вообще стали. v-on=«event: fn», v-on:event=«fn», @ event=«fn» и так далее. Да, это выглядит красиво и лаконично, но это усложнение синтаксиса, это опять же можно было решить не нагораживая монструозных языков. button click.stop.prevent=«doThis» — да, интуитивно можно догадаться, что это, но почему-то никто не сказал, что можно ввести спецсимволы в содержимое, чтобы было что-то вроде button v-on=«click: stop; @prevent; doThis». Это сходу пример, а не прямое предложение к действию. Проблема в том, что теперь очень трудно вылавливать директивы именно вуя — если раньше можно было искать по «v-», то сейчас ситуация усложнилась. Особенно при использовании кастомных событий.
Та же претензия к v-bind с его двоеточечной нотацией.
v-ref вообще какой-то бессмысленный, нахрена было вводить синтаксис v-ref:child, когда можно было все так же пользоваться атрибутом и писать v-ref=«child»?
Подстава в том, что начиная где-то с 0.12 или 0.13 вуй начал потихоньку использовать хтмл и JS как «транспортный протокол», не опираясь на них, но используя только самые базовые свойства.
Для разработчиков, которые пришли на него в последний год — все выглядит логичным и знакомым, вот там ангуляровское что-то, там реактовое, а там вот остатки хороших собственных идей. Но вот те, кто пользовался им хотя бы последние 2 года — стойкое ощущение, что из безумно простого и удобного эдакого «перочиного ножика» начинается наслаивание потыренных идей.
я ни в коей мере не считаю вуй редкостной гадостью, я просто вижу, как он именно что скатывается в раздутость, и это не приведет ни к чему хорошему. А скатывается он в силу личности автора. Более того, то, как он дебажится, я все еще считаю идеальным подходом к отладке, даже у реакта ловить ошибки гораздо сложнее, и много других вещей (типа работы с событиями) — чуть ли не лучшая, на мой взгляд, реализация в вебе.
С моей точки зрения эта библиотека изначально была очень элегантной, и с момента своего создания становится только лучше. Хотя я понимаю, что других людей некоторые ее аспекты могут сильно раздражать, как меня раздражает React, например.
вуй-лоадер (для файлов .vue ) — очень странный ход, в реальности очень трудно держать большие шаблоны рядом с JS-кодом в одном файле
1 — его можно не использовать, если не нравится; 2 — при грамотном выделении компонентов можно оставаться в разумных пределах по количеству строк; 3 — ультрасовременный гугловский polymer тоже так делает (думаю, у polymer и позаимствовали идею)
По синтаксису — это вопрос вкуса фломастеров). Мне, например, вариант с @
больше нравится
Это вообще огонь фича. Идеально для компонентов.
окей, ладно, вуй-файлы были моей болью, я не смог даже треть инструментов заставить работать с ними. сборщик, ide, линтер, профилировщик, test coverage, source maps и прочая чертовщина в ступе не заводилась с ними. плюс на момент релиза там точно была абсолютно жопная реализация поддержки очень ограниченного числа прекомпиляторов, что тоже очень спугнуло.
А как он дебажится, если не секрет?
Если включен source map, то breakpoint отлично работают непосредственно в vue файле. Еще есть расширение для хрома — можно любой компонент в консоле потыкать как хочется)
А дебаггер на эксепшенах где останавливается?
Если Евгений нас читает — было бы интересно услышать его мнение по поводу данного фреймворка.
мухоха
> прошёл довольно большой путь: от совсем небольшого стартапа до двух миллионов строчек кода за 9+ лет разработки. Конечно, за это время у нас сменилась куча фреймворков и технологий. Всё начиналось с Dojo, потом Ext.js. Мы писали на Polymer 0.5, и, когда он стал deprecated (с выходом версии 1.0), перед нами встал вопрос — что же выбрать?
т.е. когда выходит очередной новомодны фрейморк или транслятор — вы бежите и переписываете на него.
вы не пробовали на vanilla js framework перейти? я вот перешол и не нарадуюсь.
теперь нет необходимости разбиратся в очередном новом высере чудо-разработчиков фрейморка
Ну а почему не освоить новую спистоперделку за счет компании :) Справедливости ради переход на Typecript/Dart это не просто переход на новый фреймворк.
Если комбинировать его с мощью ES6 — то получается совсем хорошо.
Всё начиналось с Dojo, потом Ext.js. Мы писали на Polymer 0.5, и, когда он стал deprecated (с выходом версии 1.0), перед нами встал вопрос — что же выбрать?
Проект скачет не по трансляторам, а по библиотекам UI и фреймворкам. Очень интересно как на это смотрит владелец проекта или тот, за чьи деньги проект переписывали 3 раза. Проект явно существует без "архитектора".
Такой большой и старый проект уже должен понять, что не стоит завязываться на фреймворки. Нужно писать модульный код, в котором ни какая библиотека (а тем более фреймворк) не пронизывает все слои приложения. Как кто то сказал Не учите фреймворки, учите архитектуру
Думаем остановится на нем.
Содержатнльно.
Фронтенд — это немного больше, чем пресловутый яваскрипт, который может освоить ребенок.
практика показывает что это не так
Мой вопрос был про ExtJS, как фреймворк для фронтенда.
Тратить год жизни на собственный на яваскрипте + верстка под различные платформы для нас нет смысла. Это не наш бизнес. ExtJS прошел 10-летний путь, хочу получить отзыв об опыте использования и недостатках.
Раньше был интересен, сейчас не принимаю во внимание, так как тяжело под него разработчиков искать.
Ну вот и представьте себе груду накопившегося за 10 лет… костылей. :-) Лучше не связываться с "коробочными" фреймворками, ибо вы будете больше времени тратить на борьбу с фреймворком, чем тратили бы на кроссплатформенную реализацию.
Только за счет этих факторов js сложнее большинства скриптовых языков программирования, так что я не рискнул бы утверждать, что изучить javascrpt на хорошем уровне — это действительно детская задача.
Опыт и статистика говорят, что js изучается легче.
Те. с задачей «анимировать форму с помощью jquery» новообращенный справится вполне достойно, но на более сложных и маштабных задачах будет выдавать лютый нечитабельный треш.
Есть проблемы с сообществом. По свежим версиям совсем грустно что-то гуглить.
Есть проблемы с узкой специализацией. Таблички и графики основная фича (вы естественно можете далать на нём что угодно, но лучше всего получаются таблицы и графики).
Не смотря на вышеречисленное, повторюсь, Ext шикарен.
Лучшего MVC/MVVM на js не встречал.
Иногда на какую-нибудь кнопочку можно убить кучу времени, просто потому что решение не гуглится на раз два и ответы на stackoverflow найдутся в лучшем случае для похожей ситуации, но для версии ExtJs 4.
Единственные источники информации — это официальная документация, которая по большей части описание API, официальные примеры, официальный форум. Всё, если там нет, нигде нет.
Нет типизации на уровне языка для описания интерфейсов компонентов (только встроенная через propTypes и возможность привернуть Flow).
Есть TypeSript и даже TSX.
Сори, промахнулся веткой.
* Новый ExtJS давал еще больше готовых виджетов, которые мы как не использовали, так и не используем
* Давал MVVM с абсолютно убожеским и тормознутым биндингом
* Давал свой проприетарный шаблонизатор (верстку прямо в JS-указываешь)
* Старый мы к тому моменту уже перевели на soy, но переводить еще и пятый/шестой совсем не хотелось
Мы писали на Polymer 0.5, и, когда он стал deprecated (с выходом версии 1.0), перед нами встал вопрос — что же выбрать?
Напоролись с одной сырой технологией и решили взять другую сырую технологию. Мне нравится это упорство!
Шутка, на самом деле вы можете взять триальную версию, и таки да, весь новый функционал на Ng2. Reports, Header, Forms etc
Ломаться он перестал где-то с 11-12-й беты. Я спокойно обновлял 2 проекта, проблем не было. Было 3 момента, когда нужно было править код: изменилось местоположение сервиса LocationStrategy
, немного изменился синтаксис ngFor
и в RC они изменили структуру npm-модулей. Но проблем действительно не было: простого поиска с заменой по проекту было достаточно. А то что роутер сделали deprecated… Лучше сейчас, чем после релиза. На данный момент старый роутер работает нормально. В новом не хватает некоторых фишек, но и его прикрутить не проблема.
Или хотябы объясните почему я должен перейти с 1го на 2й, если целью статьи было рассказать какой новый фреймворк классный? Статья чисто реклама предстоящей конференции.
Тут теперь тоже думать надо, т.к. появилось больше возможностей организовать своё приложение. Можно в стиле flux/redux (однонаправленный data-flow, диспатчеры, глобальное состояние). Можно в стиле первого ангуляра с двусторонней привязкой данных. Можно делать "чистые" компоненты, без состояния, которые выводят данные и генерят события, а подавать данные и обрабатывать события в родительских компонентах. Можно всё это совмещать как хочется. Свободы, по сравнению с первой версией, явно стало больше.
А вот этот flux/redux-стиль он из коробки, или надо что-то доставлять?
Из коробки.
Ангуляр зависит от Rxjs, а с её помощью легко можно организовать реактивный флоу. В самом же ангуляре так же есть штуки, упрощающие и организацию всего этого дела (например, пайп async). Если сделать всё правильно, можно изменить стратегию отслеживания изменений, что ускорит приложение (см., например, тут)
Ещё ссылки:
http://victorsavkin.com/post/137821436516/managing-state-in-angular-2-applications
https://medium.com/front-end-developers/managing-state-in-angular-2-using-rxjs-b849d6bbd5a5#.uwf5wk5ac
https://dzone.com/articles/how-to-build-angular-2-apps-using-observable-data-1
Посему эти войны закончатся когда пройдет мода на
Polymer — это не фреймворк и не огромная библиотека компонентов. Это набор полифиллов и синтаксического сахара для веб-компонентов. Web Components — это совокупность спецификаций HTML Imports, Shadow DOM, HTML Templates и Custom Elements — того, что в скором времени станет стандратом W3C. Polymer просто предоставляет более удобный способ создания и использования веб-компонентов уже сегодня. Помимо Polymer есть ещё X-Tag, Brick, Bosonic, ScateJS и др.
Библиотека компонентов — это Element Catalog (https://elements.polymer-project.org) и CustomElements.io (https://customelements.io). Хотя готовые компоненты можно искать и брать в Bower, NPM или напрямую с GitHub.
Я бы не сказал, что Polymer огромный: сам Polymer ~35KB, полифиллы ~11KB (minified & gzipped). X-Tag и Brick используют те же полифиллы (webcomponenets-lite.js). Есть надежда, что в ближайшем будущем поддержка веб-компонентов будет реализована нативно во всех мейнстримных браузерах, полифиллы можно будет отключить и все продолжит работать.
Если нужен Dart, то есть ещё Polymer Dart, также известный как Polymer.dart (https://github.com/dart-lang/polymer-dart).
Имею положительный опыт написания нескольких достаточно больших проектов на Angular 1 и с нетерпением жду финального релиза Angular 2 для новых проектов.
И вот теперь посмотрю более глубоко на связку Dart + Angular 2.
Angular 2 несёт мир в галактику фронтенда