@collidor/injector

中文文档
2.4.20发布于 2026/08/16MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 7884

A tiny dependency injection container with type inference

原始使用文档
文档目录13 节
  1. Features
  2. Installation
  3. Usage
  4. Basic Class Example
  5. Function Dependency Example
  6. Register in class properties:
  7. Interdenpendency or race condition
  8. Error Handling
  9. API
  10. Injector
  11. Type Inference
  12. Contributing
  13. License

Codecov npm version License: MIT

Injector

A lightweight, type-aware dependency injection container for JavaScript/TypeScript (with JSDoc support), supporting class and function dependencies with type inference.

Features

  • Type Inference: Automatically infers dependency types
  • Class & Function Support: Register instances from classes or factory functions
  • Error Handling: Throws clear errors for unregistered dependencies
  • Zero Dependencies: Tiny footprint (< 1KB minified)

Installation

npm install "@collidor/injector"

Usage

Basic Class Example

import { Injector } from '"@collidor/injector"';

// Create injector
const injector = new Injector();

// Register a class instance
class DatabaseService {
  connect() { return 'Connected!'; }
}

injector.register(DatabaseService, new DatabaseService());

// Inject the instance (type inferred as DatabaseService)
const db = injector.inject(DatabaseService);
console.log(db.connect()); // "Connected!"

Function Dependency Example

// Register a factory function
const configFactory = () => ({ env: 'production' });
injector.register(configFactory, configFactory());

// Inject the function result (type inferred as { env: string })
const config = injector.inject(configFactory);
console.log(config.env); // "production"

Register in class properties:

import {Database} from './database.ts'

class Service {
    private database = inject(Database)

    getData() {
        return this.database.query();
    }
}

Interdenpendency or race condition

If two classes depend on each other in any place except the constructor, we can use getters or get the instances directly in the Methods:

import {Database} from './database.ts'

class Service {
    get database(): Database {
        return inject(Database);
    }

    getData() {
        return this.database.query();
    }
}

Error Handling

try {
  injector.inject(UnregisteredService); // Throws error
} catch (err) {
  console.error(err.message); // "No instance registered for type: UnregisteredService"
}

API

Injector

register(type, instance)

  • Parameters:
    • type: Constructor | Function | Symbol | Object (dependency identifier)
    • instance: Value to store
  • Returns: void

Registers a dependency instance.

inject(type)

  • Parameters:
    • type: Constructor | Function | Symbol | Object (dependency identifier)
  • Returns:
    T extends Type<infer M> ? M : T extends (...args: any[]) => infer R ? R : any
    
  • Throws: Error if no instance is registered for type

Retrieves a dependency instance.

Type Inference

Works with both class constructors and factory functions:

// Class registration
class AuthService {
  login() { /* ... */ }
}
injector.register(AuthService, new AuthService());
const auth = injector.inject(AuthService); // Inferred as AuthService

// Function registration
const loggerFactory = () => ({ log: (msg: string) => console.log(msg) });
injector.register(loggerFactory, loggerFactory());
const logger = injector.inject(loggerFactory); // Inferred as { log: (msg: string) => void }

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Submit a pull request

License

MIT

版本与发布记录

@collidor/injector 共发布 27 个版本,首次发布于 2025/01/31;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.4.20latest2026/08/162 个月前
2.4.172025/12/1410 个月前
2.4.162025/09/271.1 年前
2.4.152025/09/211.1 年前
2.4.142025/09/201.1 年前
2.4.132025/09/181.1 年前

关于 @collidor/injector 的常见问题

@collidor/injector 是什么?

A tiny dependency injection container with type inference

如何安装 @collidor/injector?

在项目目录运行 npm install @collidor/injector,或使用 pnpm add / yarn add / bun add。

@collidor/injector 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@collidor/injector 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@collidor/injector 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@collidor/injector 可以商用吗?

@collidor/injector 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@collidor/injector 的下载量有多少?

根据 npm 官方下载统计,@collidor/injector 在 2026/10/11 – 2026/11/09 这 30 天内被下载 7,884 次,日均约 263 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@collidor/injector 还在维护吗?

最新版本 2.4.20 发布于 2026/08/16(2 个月前);至今共发布 27 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/01/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。