Hacknote.js
600 subscribers
24 photos
5 videos
1 file
36 links
Заметки о веб-разработке и около неё

https://newesters.github.io/hacknote-js/
Download Telegram
Инверсия зависимостей в React

Старые добрые принципы SOLID могут быть полезны в любой области разработки. Особенно важным я считаю принцип инверсии зависимостей. В React существуют механизмы, позволяющие реализовать этот принцип, и в этом очень помогает Typescript...

#react #bestPractices
Менеджмент зависимостей в Javascript

Для многих разработчиков процесс установки зависимостей представляет собой магию, которая происходит при выполнении npm install. Разработчикам, имеющим у себя в проекте большое количество зависимостей и тем, кто разрабатывает эти самые зависимости, публикуя в виде NPM-пакетов, будет полезно разобраться в принципах работы этой магии, чтобы сделать установку более эффективной и не создавать проблемы коллегам....

(Кнопка "посмотреть", видимо, только у ссылок на Telegraph появляется...)

#npm #tools
Релиз Rspack

Вчера вышла первая версия Rspack — бандлера, написанного на Rust, но с API, полностью совместимым с Webpack (ну пока что не полностью).

На бумаге это должно работать так: мы просто выкидываем Webpack из проекта, заменяем его на Rspack и получаем х10 скорость сборки.

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

Помимо заявленной совместимости с Webpack Rspack предлагает также некоторое количество инструментов из коробки: например, самого быстрого результата удалось достичь без использования каких-либо лоадеров для Typescript-файлов, так как в Rspack уже встроен SWC.

Этот релиз — ещё один большой шаг к глобальной "растификации" Javascript-экосистемы. Предыдущим похожим проектом был Turbopack, но, несмотря на схожесть названия, он не предлагал такого простого способа для миграции с Webpack.

Посмотрим, во что в результате выльется такой проект. А он точно будет развиваться, поскольку разрабатывают его не опенсорс-энтузиасты, а небезызвестная компания ByteDance.

#tools #build
Запуск сайта Hacknote.js

Переезд с Telegraph на Github Pages вдохновил меня на полноценное внедрение дизайн-системы, сделанной мной для этого блога на основе темы для VSCode, которой я пользуюсь, — Monokai.pro.

Блог — это контентно-ориентированный сайт, для которого самым важным фактором является скорость доставки контента до конечного пользователя, а самый быстрый способ — прислать готовый HTML. Для этого существуют различные фреймворки, поддерживающие SSR (Server Side Rendering), например, Next.js, а так же SSG (Static Site Generation), например, Gatsby.

SSR предполагает наличие сервера, что мне не подходит, поскольку я не могу запустить сервер на Github Pages, а вот SSG — именно то, что нужно, поскольку страницы создаются не в рантайме, а прямо во время сборки сайта.

Next.js и Gatsby мне совсем не понравились поскольку по какой-то причине без прикручивания к ним костылей прямо на старте они работать не захотели. Когда я уже почти начал реализовывать свой фреймворк, мне встретился Astro, и, как оказалось, он прямо из коробки делает абсолютно всё, что мне нужно, и невероятно прост в использовании. А ещё одной его крутой фишкой является то, что он может работать с любым UI фреймворком.

Заценивайте новый сайт, на который я уже перенёс несколько статей, включая ремастер статьи про менеджмент зависимостей с перерисованными картинками (кстати, весят они в 3 раза меньше, чем старые некрасивые).

#tools
Расширение VSCode для Rush

Некоторые из вас могут знать, что мне очень нравится Rush — утилита для управления Javascript-монорепозиторием от Microsoft. Я рассказывал про неё на прошлогоднем Holy.js.

К сожалению, официальное VSCode-расширение для неё всё ещё находится в разработке, и все действия приходится производить в CLI, поэтому я решил сделать своё.

В нём я реализовал шорткаты для самых частоиспользуемых мной действий.

#tools
Коробка от вендора

У меня тут накопились некоторые мысли и я решил немного побубнить на околоэкономическую тематику.

Как вы относитесь к использованию компаниями вендорских "коробочных решений"? Мне довелось неоднократно наблюдать кейсы, в которых компания за немыслимые деньги приобретает техническое решение, которое должно решить их проблему. После интеграции проходит некоторое время и вдруг выясняется, что эта коробка не очень-то соответствует требованиям бизнеса. Разработчики судорожно пытаются что-то наколхозить сверху, но коробка оказывается весьма неповоротливой, а вендор всячески избегает доработок и улучшения API — их основной целью всё-таки было продать продукт, а не поддерживать его. В моём наивном представлении о мире такая бизнес-модель не имеет права на существование.

Мир фронтенда очень открытый и построен на опенсорсе. В NPM помимо мусорных пакетов можно найти и множество очень крутых вещей, авторы которых умудряются получать зарплату несмотря на работу над опенсорсным проектом.

Некоторое время назад я наткнулся на опенсорсную библиотеку reactflow, бизнес-модель которой предполагает платную поддержку и обучение, но бесплатное использование — весь её исходный код можно найти на GitHub и при желании кастомизировать что угодно под свои задачи. Этот подход выглядит гораздо более дружелюбно и очень надеюсь, что он жизнеспособен.

Что вы думаете на эту тему? Возможно ли вендорам пересмотреть свою политику относительно продаваемых решений или крупным компаниям суждено постоянно наступать на грабли и изобретать свои велосипеды?
Как и обещал, публикую список ссылок к своему докладу на Я ❤️ фронтенд:
- You may not need a bundler
- Pure ESM package
- Named imports in CommonJS
- ESM in NodeJS Typescript
- Types for submodules
- Module resolution: bundler
- Vite library mode
- Пример исправления для поддержки SSR
- Не нужно бандлить библиотеку
- Rollup preserveModules
- ComonJS vs ESM
- Dual Package Hazard
- Валидация package.json
Список не исчерпывающий, так что по любым вопросам добро пожаловать в комментарии)
Наткнулся недавно на такой твит. Очень понравилась формулировка, поэтому делюсь в исходном виде.
Motion-дизайн для фронтенд-разработчика рассмотрим на докладе Никиты Балихина

Когда мы говорим об анимациях в вебе, на ум сразу приходят CSS-анимации — это достаточно простой и эффективный инструмент.

Но если мы хотим сделать действительно сложную и красивую анимацию, нам могут понадобиться более мощные инструменты для motion-дизайна вроде After Effects.

В докладе рассмотрим, как фронтенд-разработчику разобраться в этих инструментах и как подружить их с веб-технологиями.

Встречаемся 2 и 3 октября в Москве на FrontendConf 2023 🙌

Программа конференции, расписание и билеты на сайте в описании канала @FrontendConfChannel
Please open Telegram to view this post
VIEW IN TELEGRAM
У меня есть ежегодная традиция делать короткие (30-60 секунд) новогодние видосы в After Effects. Видосы довольно кринжовые, но мне кажется, хорошо создают новогоднее настроение. :)

Видос на этот новый год уже готов и дожидается премьеры, а пока можете посмотреть видосы прошлых лет, которые я собрал в плейлист, а также запись вышеупомянутого доклада про Motion-дизайн с Frontend Conf, который в том числе посвящён After Effects.
В поисках рантайма для Typescript

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

Долгое время для запуска таких скриптов я использовал ts-node, который считал стандартом де-факто для решения этой задачи, но недавно наткнулся на утилиту tsx.

На поиск нового решения меня сподвигла кривая поддержка ESM в ts-node (в Node.js 18 у меня не завелось). С tsx тот же самый код запустился без лишних танцев с бубном. В качестве приятного бонуса я получил watch-mode из коробки.

Из минусов обнаружил только отсутствие в tsx проверки типов из коробки. Но, как я уже упомянал, всё ещё только tsc умеет делать проверку типов, поэтому при необходимости придётся запускать его отдельно — именно это по сути из коробки делает ts-node, но на мой взгляд проверка типов должна быть скорее частью пайплайна тестов, а не сборки и тем более запуска, поэтому минус не считаю значительным.

Автор tsx также сделал репозиторий со сравнением различных инструментов для запуска Typescript-кода.

Приходится ли вам запускать Typescript-код без бандлера? Какие инструменты вы для этого используете?
8 июня расскажу на Я ❤️ Фронтенд об инструменте, который используется в нашей компании для сборки микрофронтендов.

В программе:
- ткнём палкой в давным давно мёртвый Create React App
- проследим мотивацию, историю создания, развития и внедрения на ~60 проектов нашего инструментария для сборки
- переймём лучший опыт похожих проектов
- конечно же не забудем проявить заботу к коллегам
gpb-app.pdf
39.1 MB
Во время моего выступления на Я 💛 Фронтенд с презентацией произошли небольшие проблемки (абсолютно всё, что в ней могло сломаться, сломалось), но, полагаю, ценность доклада от этого не убавилась. Хочу сказать всем спасибо за обратную связь и действительно хорошие и интересные вопросы.

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

Если у вас остались неотвеченные вопросы, с радостью отвечу на них в комментариях😉
Media is too big
VIEW IN TELEGRAM
Пришлось покостылить даже тут)