@collidor/injector

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

小型依赖性注射容器和类型推论

中文使用文档
文档目录13 节
  1. 特征
  2. 安装
  3. 使用量
  4. 基本类示例
  5. 函数依赖性示例
  6. 在类属性中注册 :
  7. 相互依存或种族条件
  8. 处理错误
  9. API 密码
  10. Injector
  11. 类型推论
  12. 捐款
  13. 许可证

Codecov npm version License: MIT

喷出器

用于JavaScript/TypeScript(有JSDoc支持)的轻量级,有机型依赖性注射容器,以类型推论支持类和功能依赖性.

特征

  • 类型推论: 自动推断依赖类型
  • 类函数支持( F): 从类或工厂函数登记实例
  • 处理错误: 为未注册的依赖性丢出清晰的错误
  • 无依赖:小脚印(小于1KB)

安装

npm install "@collidor/injector"

使用量

基本类示例

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!"

函数依赖性示例

// 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"

在类属性中注册 :

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

class Service {
    private database = inject(Database)

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

相互依存或种族条件

如果在除构造器以外的任何地方,有两个类互相依赖,我们可以使用得到器或直接在方法中获取实例:

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

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

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

处理错误

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

API 密码

Injector

register(type, instance)

  • 参数数字 :
    • type: 构造器 QQ 函数 QQ 符号 QQ 对象( 依赖性标识符)
    • instance: 要存储的值
  • 回返数字 : void

登记依赖性实例.

inject(type)

  • 参数数字 :
    • type: 构造器 QQ 函数 QQ 符号 QQ 对象( 依赖性标识符)
  • 回返数字 :
    T extends Type<infer M> ? M : T extends (...args: any[]) => infer R ? R : any
    
  • 掷出: 没有注册实例时出错 type

获取依赖性实例.

类型推论

具有阶级建筑师和工厂功能的工程:

// 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 }

捐款

  1. 叉子存储器
  2. 创建特性分支
  3. 提交拉动请求

许可证

麻省理工学院

版本与发布记录

@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 是什么?

小型依赖性注射容器和类型推论

如何安装 @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 和提交记录判断。