@carlosv2/glue

中文文档
1.1.4发布于 2026/09/30MITTypeScriptESM + CJS近 30 天下载 8519

依赖性注射库,不碍事

中文使用文档
文档目录11 节
  1. 安装
  2. 为了在你的项目中作为包裹,
  3. 使用量
  4. 扩展
  5. 参数
  6. 服务
  7. 数值
  8. 参数插值
  9. 终止
  10. 集装箱
  11. 待办

粘贴

这是另一个 编 集装箱 用于 Javascript/ Typescript. 这个图书馆的目标是 远离你的路 代码.

安装

为了在你的项目中作为包裹,

npm i @carlosv2/glue

使用量

简单地创建所需的 YAML 文件 。 这些文件会被收集起来堆放起来 组成单一集装箱服务。 注意文件的顺序 堆积起来非常重要,因为最新的文件将覆盖相撞的id.

每个 YAML 文件可以包含以下密钥的组合(它们都是可选的):

  • 扩展
  • 参数
  • 服务

扩展

如果设定了, 此密钥必须包含一系列指向其他 YAML 文件的相对路径 . 装入器将装入这些路径,并将内容应用到文件 extends 键上显示的内容似乎已被宣布.

参数

如果设定了, 此密钥必须包含一个用于定义参数的密钥/ 值对象 其他参数和/或服务,或 直接从容器取出。 。 。 .

每个参数值可以用任意 有效值。 。 。 .

服务

如果设定了, 此密钥必须包含一个用于定义服务的密钥/ 值对象 其他参数和/或服务,或 直接从容器取出。 。 。 .

每个服务值必须是字符串或对象.

当一项服务被定义为字符串时,它被认为是别名. 这是服务 在字符串中指向服务点.

当服务被定义为对象时,需要下列密钥:

  • 符号:强制性。 A 类 价值 生成对象
  • 参数:可选. 清单 数值 与预期的论据顺序相同.
  • 工厂:可选。 A 类 价值 导致符号对象中方法的名称.
  • 财产:可选。 A 类 价值 导致符号对象中的属性名称.
  • 电话:可选。 清单 电话 将按结果执行.
  • 标记:可选。 与服务相关的标签的字符串列表 .
  • 范围:可选。 此服务属于的有上下文名称的自由形式字符串 .

请记住 factory 财务报告和审定财务报表 property 键是相互排斥的.

数值

一个值是任何类型的数据(包括任何深度和阵列的对象). 他们也可以 运行时动态评估。 为了在运行时评价值,它们必须是: 定义为带有下列主要字符之一的字符串:

  • <:此返回关联服务 。 例如,以下YAML文件:
    services:
      my.dependency:
        symbol: '(my/dependency.ts)~'
    
      my.service:
        symbol: '(my/service)~'
        args: ['<my.dependency']
    
    将注射 my.dependency 作为参数服务 my.service 服务.
  • $:此返回相关参数。 例如,以下YAML文件:
    parameters:
      name: glue
    
    services:
      my.service:
        symbol: '(my/service)~'
        args: ['$name']
    
    将注射 name 作为参数到 my.service 服务.
  • >: 这返回包含给定标记的一系列服务。 例如,以下YAML文件:
    services:
      my.child1:
        symbol: '(my/child1.ts)~'
        tag: ['children']
    
      my.child2:
        symbol: '(my/child2.ts)~'
        tag: ['children']
    
      my.parent:
        symbol: '(my/parent)~'
        args: ['>children']
    
    将解释为 ['<my.child1', '<my.child2'] 作为对 my.parent 服务.
  • }:此返回一个服务对象, 其中密钥为 ID, 值为例 .
    services:
      my.child1:
        symbol: '(my/child1.ts)~'
        tag: ['children']
    
      my.child2:
        symbol: '(my/child2.ts)~'
        tag: ['children']
    
      my.parent:
        symbol: '(my/parent)~'
        args: ['}children']
    
    将解释为 {'my.child1': '<my.child1', 'my.child2': '<my.child2'} 作为对 my.parent 服务.
  • %:此返回环境变量。 它有这个格式 %<name>[/<type>[/<fallback>]] 其中:
    • name: 环境变量的名称
    • type: 键入 environemnt 变量将会被互通. 必须是:
      • s字符串
      • b:布尔
      • n编号
    • fallback: 找不到环境变量时的倒置值 例如,考虑到环境变量 MY_VAR=4,以下YAML文件:
    parameters:
      var1: '%MY_VAR'
      var2: '%MY_VAR/n'
      var3: '%MY_VAR/n/5'
      var4: '%MY_OTHER_VAR'
      var5: '%MY_OTHER_VAR/n/5'
    
    将创建参数 var1 有数值 '4' (作为字符串) var2 有数值 4 (数目), 页:1 var3 有数值 4 (编号) var5 有数值 5 (作为编号). 注意定义 页:1 var4 将产生例外,因为环境变量 MY_OTHER_VAR 无法找到.
  • !:此返回代码的评价 。 例如,以下YAML文件:
    parameters:
      now: '!Date.now()'
    
    将创建参数 now 使用当前时间戳.
  • (:根据 终止。 。 。 .
  • [: 根据 终止。 。 。 . 这个 * 字符被允许作为单个目录的占位符,而 ** 允许字符 作为任意数量嵌入目录的占位符.

服务定义也是有效的值,从而允许服务定义具有其他服务定义 被窝.

参数插值

字符串值允许有指向其他值的占位符. 这些占位符将进行评估 在运行时间中,并替换到它们指向的参数.

为了插入参数 占位符必须像这样被包围 @{placeholder}。 。 。 .

例如:

parameters:
  library: glue
  opinion: '@{library} is awesome!'

当拉出 option 参数,容器将返回 glue is awesome!。 。 。 .

如果内插不可取,它可以用 \。 。 。 .

例如:

parameters:
  placeholder: parameter
  message: 'You can replace any \@{placeholder} found in a @{placeholder}'

当拉出 message 参数,容器将返回 You can replace any @{placeholder} found in a parameter。 。 。 .

终止

使用时 ( 财务报告和审定财务报表 [ ,终止将确定 将导入的 :

  • 没有终止: 将导入整个模块 。 例如,以下YAML文件:
    parameters:
      obj: '(my/path.ts'
    
    将解释为 import * as obj from 'my/path';
  • ):将从模块中导入默认对象。 例如,以下YAML文件:
    parameters:
      obj: '(my/path.ts)'
    
    将解释为 import obj from 'my/path';
  • )<name>: 将从模块中导入命名对象 。 例如,以下YAML文件:
    parameters:
      obj: '(my/path.ts)MyObj'
    
    将解释为 import { MyObj } from 'my/path';
  • )~: 将导入文件中唯一导出的对象 。 如果输出对象超过一个, 会出现错误。 举例来说,如下: my/path.ts 文件 :
    function addition(a: number, b: number): number {
        return a + b;
    }
    
    export const value = addition(4, 5);
    
    然后,以下YAML文件:
    parameters:
      obj: '(my/path.ts)~'
    
    将解释为 import { value } from 'my/path';
  • )~<type>: 将导入文件中唯一一个嵌入类型的导出对象 。 如果超过 1 请求类型的对象将导出, 错误将上升 。 目前只有 接受以下类型:
    • class: 用于类
    • func: 用于职能 举例来说,如下: my/path.ts 文件 :
    export function addition(a: number, b: number): number {
        return a + b;
    }
    
    export const value = addition(4, 5);
    
    然后,以下YAML文件:
    parameters:
      obj: '(my/path.ts)~func'
    
    将解释为 import { addition } from 'my/path';

集装箱

容器物体采用下列方法:

  • get<T = unknown>(id: string): Promise<T>: 它返回由 id。 。 。 .
  • getParameter<T = unknown>(id: string): Promise<T>: 它返回参数 id。 。 。 .
  • findServiceIdsByTag(tag: string): string[]:它返回包含以下内容的服务标识列表: tag。 。 。 .

待办

以下是有待完成的任务清单:

  • 改进文件(增加装入相位器的文件)
  • 改进非汇编支持

版本与发布记录

@carlosv2/glue 共发布 10 个版本,首次发布于 2024/07/18;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.1.4latest2026/09/301 个月前
1.1.32026/09/221 个月前
1.1.22025/03/041.7 年前
1.1.12025/02/251.7 年前
1.1.02025/01/311.8 年前
1.0.42024/08/052 年前

关于 @carlosv2/glue 的常见问题

@carlosv2/glue 是什么?

依赖性注射库,不碍事

如何安装 @carlosv2/glue?

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

@carlosv2/glue 支持 TypeScript 吗?

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

@carlosv2/glue 支持 ESM 还是 CommonJS?

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

@carlosv2/glue 可以商用吗?

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

@carlosv2/glue 的下载量有多少?

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

@carlosv2/glue 还在维护吗?

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