Skip to content

Path-IoC按名字装配 TypeScript 模块,告别相对路径 import

无需装饰器与 reflect-metadata,避开传统 DI 容器的痛点。50 个模块 7.6µs 装配完成,连 Serverless 冷启动也几乎无感。

Path-IoC 品牌标识
⚡path-ioc-demo · 实机编码与极速点火演示录屏
1080P HD
告别相对路径 · 零装饰器 · 零 reflect-metadata

控制反转的三代演进:异步初始化与装配依赖实测

真实工业场景:模块 A (remoteConfig) 启动时需基于秘钥异步发起网络请求拉取配置数据包,对外暴露纯同步函数 isEnabled(feature);模块 B (orderService) 在自身初始化装配期,必须同步调用模块 A 的函数决定是否启用特性(模块 B 强物理依赖模块 A 的初始化先决条件)。

spring/AppConfig.javaSpring · 经典 @Bean 工厂范式
java
// Spring: 依托 JVM 物理多线程模型,在启动阶段阻塞主线程等待异步数据包拉取就绪
@Configuration
public class AppConfig {

  @Bean
  public RemoteConfig remoteConfig() {
    RemoteConfig config = new RemoteConfig();
    config.initFromRemote(secretKey); // 启动阶段阻塞线程等待远程配置完成
    return config;
  }

  @Bean
  public OrderService orderService(RemoteConfig remoteConfig) {
    // 模块 B 在初始化装配期同步调用模块 A 的函数
    boolean enableDiscount = remoteConfig.isEnabled("vip_discount");
    return new OrderService(enableDiscount);
  }
}
nestjs/app.module.tsNestJS · 装饰器崩溃与 useFactory 退化
typescript
// 痛点:TS Class 构造器无法 await!若用 onModuleInit 会因时序竞态读取到未初始化空值;
// 苦心经营的 @Injectable() 类体系在此刻土崩瓦解,被迫退化为冗长脆弱的 useFactory 字典:
@Module({
  providers: [
    {
      provide: "REMOTE_CONFIG",
      useFactory: async () => {
        const config = await fetchRemoteConfig(process.env.SECRET_KEY);
        return { isEnabled: (feature: string) => config[feature] ?? false };
      },
    },
    {
      provide: "ORDER_SERVICE",
      useFactory: (config: RemoteConfig) => {
        // 模块 B 必须手写工厂胶水代码,并手动在 inject 数组中维持脆弱的字符串映射
        const enableDiscount = config.isEnabled("vip_discount");
        return new OrderService(enableDiscount);
      },
      inject: ["REMOTE_CONFIG"],
    },
  ],
})
export class AppModule {}
src/modules/ (remoteConfig & orderService)Path-IoC · 原生拓扑编排与零竞态装配
typescript
// 模块 A (src/modules/remoteConfig/index.ts):原生 async 函数初始化,返回纯同步闭包方法
export const main = async () => {
  const config = await fetchRemoteConfig(process.env.SECRET_KEY);
  return {
    isEnabled(feature: string) {
      return config[feature] ?? false;
    }, // 内部数据已就绪,纯同步!
  };
};

// 模块 B (src/modules/orderService/index.ts):声明依赖短名称,装配期直接同步消费
export const dependencies = ["remoteConfig"];

export const main = (container: ModularContainer) => {
  const { remoteConfig } = container;
  // 拓扑引擎自动保证:唤醒 orderService 时,remoteConfig 的 async 初始化必定已 100% 解决!
  const enableDiscount = remoteConfig.isEnabled("vip_discount");

  return {
    createOrder(item: string) {
      return { item, price: enableDiscount ? 80 : 100 };
    },
  };
};
硬核压测数据

生产级硬件实测基准 (Apple M5 / Node 24)

查看完整测试方法论 →
50 节点容器实例化
7.6 µs
微秒级无锁直通装配。Serverless / Workers 单次请求期零等待延迟。
500 节点静态图编译
496 µs
进程冷启动单次全拓扑校验,随后全局静态缓存复用。
核心引擎代码体积
8.8 KB
纯粹的 ES 模块闭包。零外部重型依赖,零元数据查表开销。
生产级商业 SaaS 脚手架

打造全球出海盈利业务:Path-IoC Pro 脚手架

深度集成 Cloudflare Workers 全球边缘计算 + Hono + React 19 + Path-IoC + Tailwind CSS + Stripe 国际支付履约 + D1 数据库。数小时内上线你的全球化高毛利 SaaS 业务。

Released under the MIT License.