@ dunx/ 变形
使 Dunx 容器使用构造器注入的负载时间转换.
export class UsersService {
constructor(private readonly repo: UsersRepository) {}
}
没有 @Injectable,没有 @Inject,没有 reflect-metadata,没有 experimentalDecorators。 。 。 .
这个 供应商指南 简直太夸张了.
安装
bun add @dunx/transform
设置
# bunfig.toml
preload = ["@dunx/transform/preload"]
[test]
preload = ["@dunx/transform/preload"]
或者根本没有配置文件 :
bun --preload @dunx/transform/preload src/main.ts
对于生产建筑,请将插件传递到 Bun.build数字 :
import { depsPlugin } from '@dunx/transform';
await Bun.build({ entrypoints: ['src/main.ts'], plugins: [depsPlugin] });
发布软件包
预装跳过 node_modules,所以npm上的软件包必须携带自己的
记录或任何东西都无法输入其类. @dunx/transform/build 这样做
构建,读取您 exports 财务报告和审定财务报表 bin数字 :
// build.ts
import { buildPackage } from '@dunx/transform/build';
await buildPackage();
它假设来源于 src/,输出到 dist/一个 tsconfig.json 时间
软件包根。 声明来自 typescript一个可选的对等点,因为
邦没有。 整个行走在
出版指南。 。 。 .
它会做什么
它分析每个文件 oxc-parser 阅读每个班级的申报
构造参数类型 。 然后每类附加一个声明:
Object.defineProperty(UsersService, Symbol.for('dunx.deps'), {
value: () => [UsersRepository],
});
@dunx/core 阅读该记录并解决这些论点,然后呼吁 new。 。 。 .
记录是 th克,返回参数类型的函数。 这个
容器在解决类时使用,而不是在文件加载时使用。 这么说
在文件后面声明或通过循环导入达到的依赖性需求
没有 forwardRef。 。 。 .
仅添加所附说明。 原始来源的其他字节是 保留,因此注释、格式化和堆栈痕迹中的行号是 不变.
参数它不会猜测
运行时不存在的类型名称被记录为
unresolved,连同其原始源文本。 容器就抛出
启动时 :
UsersService cannot be constructed: parameter 2 (private readonly cfg: AppConfig)
names nothing that exists at runtime, so there is no token to resolve. Replace
the type with an abstract class, or bind it with token() and read it with
inject(TOKEN) in a field initializer.
此错误涵盖只输入类型, 内含 type 指定者, 一个本地
interface 或类型别名,类类型参数,原始和结合. 对a
键入,错误指示您使用一个数值导入。 剩下的时间,
使用抽象类或 token()。一个符号没有类型可以设置一个参数,
所以读它与 inject(TOKEN) 在现场初始化.
类 表达式 已跳过 : const X = class Inner {} 绑定 Inner 仅限
在类体内部,所以附加的语句不能引用名称.
如果你忘了登记
集装箱检查 ctor.length 以有记录的依附者为准
插件从未见过是启动错误而不是一组错误 undefined 字段 :
UsersController declares 1 constructor parameter(s) but no dependencies were
recorded for it, so @dunx/transform did not transform UsersController.