Возможно, это не совсем очевидно, особенно на фоне того, о чём я тут обычно пишу, но большую часть свой карьеры мой основной фокус был на… фронт-энде. Ага, JavaScript и товарищи. То есть я и другими вещами занимался, но святое дело скриптописания всегда было в центре. Правда, после переезда в Канаду его количество в моей жизни несколько поубавилось. Мне всё ещё перепадают эпизодические скриптовые задачи по веб проекту, который мы начали аж в 2009-м году, но в целом последние 2 года я работаю только с серверами.
Если веб проект начался девять лет назад, то практически наверняка то, на чём он написан, уже устарело. Мы же его начинали ещё до ангуляра, реакта, эмбер, вью и прочей нечисти. jQuery уже был, да. Мы попользовались им несколько лет и отправили назад в страну вечной охоты. А в остальном приходилось изобретать свои инструменты и избегать соблазна переписать проект на всё появляющихся новых фреймуорках, каждый из которых «на этот раз всё делает правильно». Не то, чтобы нам не хотелось попробовать, но главнокомандующий был непреклонен и не взирая на наше недовольство и пророчества о скором крахе умудрился сколотить на проекте хорошее состояние.
Поэтому, чтобы хоть как-то оставаться в курсе индустрии, все модные фронтэндерские штуки я прогонял через туториалы и всякий Pluralsight уже лично для себя. Обычно это работало, но в этот раз, после двухлетнего перерыва, что-то сильно изменилось.
Привет, Webpack!
Когда я последний раз плотно работал с фронт-эндом, вэбпак уже был. Правда, ещё не было очевидно, стрельнет он, или нет. К тому же всякие Grunt, Gulp, TypeScript и SystemJS уже тогда могли собрать кучу JavaScript модулей вместе, так что зачем к этому зоопарку ещё что-то? Но акей, вэбпак победил, так что иду на Pluralsight, нахожу по нему курс и.. немного фигею.
Какую именно новую проблему вэбпак научился решать? Ну или хотя бы старую, но лучше, чем было раньше. Он вроде как теперь везде и стандарт, но я смотрю на всё то, что суётся в webpack.config.js файл, и вижу только изоленту и суперклей, которым мне предлагают присобачить кота к картофелине. Зачем? Ну типа они в одной комнате были, значит логически связаны.
Да, возможно это уже старческое и немного из оперы «порядок раньше был». Ну и переучивать что-то новое не всегда приятно. Но с другой стороны, во фронт-энде никогда не было порядка, так «раньше» тут не при чём. Да и действительно, с какого перепуга надо переучивать решение проблемы, если она и так уже была решена? К тому же, за последние годы это далеко не первая новая штука, которую я учу, но определённо единственная, на которую хочется сказать «это что за поделка?».
Самое прикольное, что примеры вэбпаковской конфигурации, с которыми я игрался, были написаны для его третьей версии. Где-то с полгода назад. Сегодня текущая версия — 4.4, и она, блин, уже не совсем совместима с третьей. То есть для того, чтобы определиться с форматом настроек, уже недостаточно 5 лет разработки и первых трёх релизов? Да меня б уволили уже за такое.
Печаль, в общем.
Привет, Vue.js!
С другой стороны, параллельно с вэбпаком я играюсь с Vue.js, и это неожиданно приятная штука. Vue тоже существовал в те времена, когда я имел к скрипту отношение, с ним тоже было не понятно, выстрелит, или нет. Выстрелил, и это здорово. Описывать, что именно в нём мне нравится неожиданно тяжелее, чем бухтеть на вселенскую несправедливость и кривые руки, но я попробую.
Во-первых, я впечатлён, что для простых задач Vue тоже остаётся простым. Когда задача становится больше и тяжелее, во вью тоже подключаются дополнительные абстракции, и для нового уровня сложности они выглядят уместными. Мало того, то это выглядит как качественный дизайн, так ещё оно и офигенно снижает порог вхождения.
Во-вторых, код на вью — очень честный. Когда его читаешь, то, в принципе, понятно, как именно он будет работать, какие побочные эффекты произведёт, и почему. Его легко предсказывать. В том же ангуляре даже над дефолтными примерами нужно задуматься, а почему они работают. Не сложно, конечно, но зачем?
Ну и наконец у них очень гармонично смотрится весь этот декларативный подход. Абсолютно не новая идея, но опять же, когда из неё получается логическая и законченная модель, это как новый алфавит выучить — столько новых слов и решений можно придумать.
Мораль
Пока что этот марш-бросок по современному фронт-энду немного озадачивает. С одной стороны, есть Vue.js, и он делает индустрию лучше. С другой стороны есть вэбпак, и с ним складывается впечатление, что в каком-то месте эволюция по спирали заменилась хождением по кругу.
Чего я не понимаю, так это почему меня только сейчас так торкнуло? Фронт-энд же всегда был со странностями. Может, последние годы с бэк-эндом и DevOps разбаловали? Там, что ни говори, даже сырые инструменты выглядят логично. Как по одиночке, так и когда их собирают вместе в рамках нового продукта. Эх, прав был дедушка Крокфорд. Что-то с вебом не так.
Как вам react, redux, react-router, redux-saga?
А я с ними дальше hello-world’ов никогда не лазил, так что эмоционального отклика особо и не было. Так, любопытно. Про redux-saga вообще впервые только что услышал.