TypeScript-библиотека · v2.0.0
@zirion/ioc
Легковесный IoC-контейнер без внешних зависимостей для Node.js с внедрением через конструктор, ленивым разрешением и singleton/request scope.
@zirion/ioc — компактный Inversion of Control контейнер для приложений на Node.js. Он делает управление зависимостями явным и не добавляет в проект собственных runtime-зависимостей.
Возможности
- Внедрение классов и зарегистрированных значений через конструктор.
- Singleton и request-scoped жизненные циклы провайдеров.
- Контексты для зависимостей в рамках запроса.
- Ленивое разрешение зависимостей.
- Fluent API для настройки контейнера и отсутствие внешних зависимостей.
Установка
npm install @zirion/ioc
Продолжите с полным руководством по Dependency Injection: scope, асинхронные фабрики, lifecycle hooks, паттерны тестирования, ошибки, миграция и API-справочник.
Пакет распространяется с открытым исходным кодом по лицензии MIT. Актуальный roadmap находится в репозитории.
История версий
- Разрешение зависимостей стало асинхронным:
get()иgetOrFail()теперь возвращают promises. - Поле провайдера
valueзаменено на поддерживающий асинхронность APIvalueFactory. - Добавлена типизированная композиция контейнера: каждый вызов
add()переносит зарегистрированные селекторы в тип результата. - Добавлены object selectors и фабрики, возвращающие значения или конструкторы классов.
- Добавлен настраиваемый logger с консольной реализацией по умолчанию и экспортируемыми интерфейсами.
- Добавлены lifecycle hook
onInitializedи aliasbuild()дляfinalize(). finalize()теперь работает как с зарегистрированными объектами, так и с классами и возвращает собранный контейнер.
- Удалён готовый экземпляр контейнера на уровне пакета: теперь пользователь создаёт собственный
Container. - Улучшен вывод возвращаемых типов для class selectors в
get()иgetOrFail(). - Упрощены package exports и удалена точка входа
@zirion/ioc/container. - Заявлена поддержка Node.js 18+ и добавлены метаданные совместимости с браузерами.
- Обновлены документация и ключевые слова пакета.
- Исправлен поиск lifecycle hook: контейнер теперь корректно вызывает
onFinalized(). - Запуск тестов добавлен в проверки перед публикацией пакета.
- Обновлены TypeScript, ESLint, Vitest и типы Node.js.
- Добавлены структурированные ошибки
DependencyInjectionErrorи экспортируемые коды ошибок контейнера. - Добавлена валидация отсутствующих и повторных targets, неизвестных selectors/scopes и некорректных resolvers.
- Добавлены явные ошибки для отсутствующего request context и недопустимого внедрения request scope в singleton.
- Исправлено кэширование singleton: разрешённый экземпляр теперь переиспользуется.
- Добавлены читаемые имена selectors, расширенные тесты и отчёты покрытия.
- Техническая публикация, синхронизирующая версию в метаданных пакета с npm-релизом.
- Переработаны структура пакета и публичные точки входа.
- Добавлены отдельные сборки CommonJS, ES modules и деклараций типов.
- Добавлены документация пакета, примеры использования и руководство для contributors.
- Добавлена автоматизация обновления зависимостей и обработки неактивных issues.
- Первая публикация IoC-контейнера в npm.
- Добавлены регистрация провайдеров и ленивое разрешение зависимостей.
- Добавлено внедрение через конструктор с singleton и request-scoped жизненными циклами.
- Добавлены контекстное кэширование request-scoped провайдеров и lifecycle-контракт
onFinalized.
Интерактивный пример
Попробовать @zirion/ioc
Измените пример и запустите его локально в браузере. Код никуда не отправляется.
Результат
Готово. Нажмите «Запустить» или ⌘/Ctrl + Enter.