Как стать автором
Поиск
Написать публикацию
Обновить
55.27

TypeScript *

Cтрого типизированная надстройка для JavaScript

Сначала показывать
Порог рейтинга
Уровень сложности

Сердце Фреймворка: Философия и Практика Dependency Injection в Angular

Уровень сложностиСложный
Время на прочтение18 мин
Количество просмотров162

Dependency Injection (DI) один из столпов, на которых держится фреймворк Angular. Каждый разработчик, так или иначе, сталкивается с ним с первого дня: запрашивает сервисы в конструкторе, добавляет providedIn: 'root' и видит, как «магия» работает. Но именно в этом и кроется ловушка.

Для многих DI так и остается на уровне «магии» удобного механизма, который просто работает. Однако поверхностное понимание этого мощнейшего инструмента неизбежно приводит к архитектурным компромиссам: неочевидным утечкам памяти, сложностям в тестировании, созданию неявных связей между компонентами и, в конечном счете, к коду, который трудно поддерживать и масштабировать.

Эта статья не очередной пересказ официальной документации. Это глубокое погружение в архитектуру и философию Dependency Injection в Angular. Наша цель демистифицировать «магию» и превратить ее в предсказуемый, управляемый и мощный инженерный инструмент в вашем арсенале.

Мы пройдем путь от фундаментальных принципов инверсии контроля (IoC) до тонкостей иерархического инжектора. Мы разберем на атомы все стратегии предоставления зависимостей, научимся управлять их жизненным циклом и областью видимости. Мы изучим продвинутые паттерны с использованием InjectionToken и multi-провайдеров и поймем, как современная функция inject() меняет подход к композиции логики.

Перейти к полному анализу

Новости

Стартап за выходные: AI-агент для БД, часть 1

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1K

Ну кто не мечтает запустить стартап за одни выходные?
Давно хотел развеяться, и чутка отвлечься от рутины и работы.
А ещё давно хотел пощупать Tauri v2, и новомодные фреймворки для построения AI-агентов (ai-sdk / mastra / llamaindex.

Идея простая: десктопное приложение, внутри ИИ-агент, который подключается к БД, получает данные о структуре таблиц/вьюшек. Справа сайдбар: интерфейс чата с агентом, а основное пространство - холст, на котором агент размещает что хочет сам. А именно - виджеты, которые делают запросы к БД, и выводят их в приятном глазу виде.
Никакого удалённого бекенда, open-source, доступы к БД хранятся исключительно локально, всё секьюрно.

Так как весь код открытый, то процесс я буду логировать в репозитории: https://github.com/ElKornacio/qyp-mini

Читать далее

Web3 Frontend — с чего начать?

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.7K

Создание фронтенда для Web3-приложений - это не только дизайн, кнопки и React. Это мост между пользователем и блокчейном. И ты, как фронтенд-разработчик - тот, кто этот мост может построить...

Читать далее

Разработка браузерного расширения: путь от идеи до публикации в web store

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров1.1K

Разработка браузерного расширения началась с простой идеи: упростить поиск по закладкам и открытым вкладкам, а также попробовать свои силы в создании проекта с элементами монетизации. В этой статье я расскажу, как за две недели прошёл путь от прототипа до публикации в Chrome Web Store и Firefox Add-ons, какие технологии использовал и с какими трудностями столкнулся. Надеюсь, мой опыт вдохновит других разработчиков попробовать свои силы в создании подобных проектов. Полный код проекта доступен на GitHub.

Читать далее

Про esModuleInterop и совместимость модулей ES6 и CommonJS

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.2K

Всем привет, хабровчане! Я (не)начинающий разработчик с относительно небольшим стажем, который пытается углубить свои знания в любимой технологии. В работе и повседневной жизни очень часто приходится работать с языком TypeScript, который мне очень нравится, но к своему стыду, сам очень плохо знаком с настройкой его конфигурации, поэтому решил восполнить этот пробел, ведя собственный Today I Learned. Некоторые опции tsconfig являются очень простыми и понятными. Другие же заставляют знатно напрячься. И даже если поверхностное назначение какой-то настройки является понятным, все равно возникает желание разобраться с принципом ее действия, понять, на какие структурные аспекты проекта она влияет, а также узнать, а как вообще людям жилось до ее появления.

Как раз об одном из них и пойдет разговор в этой статье, а именно об esModuleInterop. Действие опции проверялось при попытке подружить CommonJS-модуль с ES-модульным проектом. Поверхностная гуглешка не дала исчерпывающий ответ на ряд моих вопросов, поэтому приходилось обращаться к спецификации ES6, документации tsconfig (упаси боже читать документацию (шутка)), в личные блоги авторитетных дядек в сообществе и к описаниям модульных систем. На основе найденной информации я составил небольшое резюме, с попыткой собрать материал во едно. Надеюсь, кому-то он покажется интересным. Приятного чтения!

Читать далее

Как Хоук упрощает отладку JavaScript с помощью трекера консоли

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.4K

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

Читать далее

Создание расширения для приостановки вкладок под Manifest V3

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров310

Давно пользовался расширением The Great Suspender для приостановки вкладок, но оно давно заброшено и обновлений не планируется, а найти полноценную замену с Manifest V3 не удалось.
Тем временем Chrome окончательно отключает поддержку Manifest V2 для расширений начиная с версии 139, которая выйдет на днях (30 июля - Early Stable Release, 5 августа - Stable Release) и вопрос замены стал очень актуальным.
Посмотрел на исходный код The Great Suspender и решил, что проще написать с нуля, чем исправить. Изучил на API для расширений, всё должно быть просто: по таймеру проверяем вкладки, приостанавливаем (переадресовываем на страницу расширения) давно не использующиеся вкладки (определяем по свойству вкладки lastAccessed), по клику на приостановленной страницы возвращаем обратно на оригинальную страницу. Казалось бы, какие тут могут быть проблемы...

Читать далее

Vue 2 в 2025: какие паттерны стоит забыть, а какие – оставить

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.5K

Vue 2 в 2025 году официально стал legacy, но множество проектов всё ещё работают на нём. Миграция на Vue 3 не всегда возможна сразу, поэтому важно правильно поддерживать и модернизировать старый код.

В этой статье разберём:

Устаревшие паттерны, от которых лучше избавиться.

Проверенные подходы, которые остаются актуальными.

Альтернативы из Vue 3, которые можно адаптировать уже сейчас

Читать далее

Frontend и OpenAPI: генерация клиента, мокирование API и данных с помощью MSW

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров2.4K

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

Читать далее

Прощай, Zone.js: ускоряем Angular с Signal API и Zoneless-подходом

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.5K

Привет! Я Незар, фронтенд-разработчик Т-Банка в одном из продуктов Т-Бизнеса. Наша команда использует Angular, и мы следим за всеми изменениями, которые с ним происходят.

В статье разберу, как Angular эволюционировал от Zone.js к Zoneless-приложениям с современным реактивным подходом Signal API и почему это стало ключевым шагом для повышения производительности и упрощения реактивного программирования. 

На примерах и замерах производительности посмотрим, как переход к Zoneless-подходу с Signal API позволяет сократить избыточные перерисовки, ускорить отклик приложения и сделать код значительно чище и предсказуемее. Сделаем Angular-приложения быстрее и проще, добро пожаловать под кат!

Читать далее

Async pipe не чистый

Уровень сложностиПростой
Время на прочтение37 мин
Количество просмотров2.5K

Всем привет, меня зовут Максим Иванов. В основном я пишу обзоры и русифицирую статьи для начинающих разработчиков. Я очень люблю Angular и иногда рассказывать что-то о нем. Если вы только начинаете свой путь в изучении этого фреймворка, надеюсь эта статья будет вам полезной. Cегодня мы с вами поговорим о том, что такое пайпы (pipes), как они устроены и что не так с одним из самых популярных и доступных из коробки пайпов, таких как async. Желаю приятного прочтения и хорошего настроения. Поехали!

Читать далее

Как мы сделали «ssyoutube для ChatGPT» и что из этого вышло

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров11K

Потребность поделиться диалогом из ChatGPT рано или поздно возникает. Однако нативного экспорта в удобный формат вроде PDF или Markdown платформа не предлагает. Копипаст — плохое решение: таблицы разваливаются, форматирование кода съезжает, а изображения просто пропадают. Мы решили эту задачу для себя, написав собственный конвертер. Оказалось, что он полезен не только нам.

Так появился pdfchatgpt.com. Принцип простой: копируешь share-ссылку и диалога с ChatGPT, добавляешь pdf в начало ссылки и получаешь готовый файл. Также можно перейти на pdfchatgpt.com и просто вставить ссылку на диалог.

В этой статье — технический разбор нашего решения: от простого скрипта с puppeteer до асинхронной системы с очередями. Делимся опытом для тех, кто решает схожие задачи.

Читать далее

Стендап WTF TypeScript

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.8K

Эта статья — вольный перевод свежего стрима ThePrimeTimeagen (бывший разработчик Netflix, харизматичный чувак с усами)

"I'm just the normy, but everyone is so bad at their crap, so I just rise to the top"

Цитата:
«Я просто обычный разработчик, но все вокруг настолько плохо справляются со своей работой, что на их фоне я кажусь топовым»

Читать далее

Ближайшие события

Vue: Composables и TS это вам не Mixins и JS. С ними сложнее

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров2.9K

Пришел к хитрому паттерну. Делюсь.

Будет полезен тем кому нравиться или приходится работать с Vue.
В подходящей ситуации он сэкономит кучу времени и поможет избежать дублирования кода.

Поехали!

От Аристотеля до Тьюринга: что такое функциональное программирование и как оно облегчает жизнь

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров13K

Привет, меня зовут Марат Зимнуров, я тимлид в кросс-функциональной команде HR Admin Tech Авито. Тема функционального программирования не обделена вниманием — и все же тяжело найти действительно понятный и структурно изложенный разбор данного инструмента. Нет нормального гайда для старта — ни у нас, ни на Западе. Многие говорят про иммутабельность и монады, но путаются в основах. В статье разбираю, что такое функциональное программирование на самом деле и зачем оно нужно.

Читать далее

Как я подружил Yandex Cloud и Gemini API без миграции на зарубежные сервера

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3K

Когда я начинал писать Node.js-сервис, который должен был интегрироваться с LLM-моделью, я уже понимал, что доступ к некоторым зарубежным API из России может быть проблемой. Именно поэтому моим первоначальным выбором была модель от Yandex Cloud — Yandex GPT.

Но после того как я и мои товарищи немного пообщались с ней, стало ясно, что Yandex GPT нам не подходит. Её ответы были слишком неестественными, «нечеловеческими» — особенно это было заметно в нашем конкретном кейсе. Поэтому пришлось искать альтернативу среди зарубежных моделей. Вариант обучать собственную модель отпал сразу — опыта у меня в этом не было, а искать кого-то, кто сможет это сделать, не было времени, так как хотелось быстро запустить. Так выбор пал на Gemini API от Google, о котором было много позитивных отзывов.

Однако это означало, что нужно было как-то решить проблему доступа из России, ведь мой сервис размещён именно в Yandex Cloud.

Читать далее

Организация селекторов для тестирования

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров713

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

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

🧪🧪🧪 TEST_ID="Читать далее" 🧪🧪🧪

Как я навайбкодил ИИ-переводчик для браузера, потому что остальные — унылый мусор

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров4.8K

Я починил плохой перевод силами ИИ, написав расширение при помощи ИИ. И я удивлён, что до сих пор такого не сделали.

Читать далее

Введение в WebRTC

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров7.4K

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

Читать 📞📞📞

Реактивные системы: возможно ли отслеживать зависимости в асинхронном коде?

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров1.6K

В реактивных системах существуют специальные функции, такие как watchEffect во Vue или autorun в MobX, которые умеют автоматически отслеживать зависимости и перезапускать «эффект» при их изменении. Принцип их работы следующий:

Читать далее
1
23 ...