粘贴
这是另一个 编 集装箱 用于 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(数目), 页:1var3有数值4(编号)var5有数值5(作为编号). 注意定义 页:1var4将产生例外,因为环境变量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文件 :
然后,以下YAML文件:function addition(a: number, b: number): number { return a + b; } export const value = addition(4, 5);
将解释为parameters: obj: '(my/path.ts)~'import { value } from 'my/path';)~<type>: 将导入文件中唯一一个嵌入类型的导出对象 。 如果超过 1 请求类型的对象将导出, 错误将上升 。 目前只有 接受以下类型:class: 用于类func: 用于职能 举例来说,如下:my/path.ts文件 :
然后,以下YAML文件:export function addition(a: number, b: number): number { return a + b; } export const value = addition(4, 5);
将解释为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。 。 。 .
待办
以下是有待完成的任务清单:
- 改进文件(增加装入相位器的文件)
- 改进非汇编支持