前言
Deno 是一个新兴的 JavaScript 和 TypeScript 运行时,与 Node.js 不同,它的核心模块和代码加载方式都没有遗留的历史问题。值得一提的是,Deno 的模块加载方式是一种具有前瞻性的技术,这使得模块可以轻松地从任意 URL 加载,而不仅仅是从文件系统。本文将指导您如何在 Deno 中编写自己的模块,包括如何创建依赖注入、测试和发布模块等。
基本结构
在 Deno 中,一个模块可以是多个文件,并且可以具有任意的目录结构。一个比较好的约定是,在每个模块中都有一个名为 mod.ts
的主文件作为入口点。在这个文件中,我们可以导出所有我们想要公开的东西。
// module.ts export class MyClass { public method() { console.log('Hello World!'); } }
// mod.ts export * from './module.ts';
在上面的代码中,我们定义了一个 MyClass
类,并从 mod.ts
中导出了它。这意味着任何导入这个模块的代码都可以使用 MyClass
。
依赖注入
在实践中,我们经常需要在代码中使用一些其他的对象。依赖注入是一种将这些对象提取到参数中并传递给代码的方法,从而可以更轻松地测试和维护代码。在 Deno 中,我们可以使用 symbol
和 typealias
类型注解来实现依赖注入。
// types.ts export const MY_DEPENDENCY_TOKEN = Symbol('my-dependency'); export type MyDependencyType = { method(): void; };
-- -------------------- ---- ------- -- --------- ------ - -------------------- ---------------- - ---- ------------- ------ ----- ------- - ------------ ------- -------- ------------- ---------------- - ----- -- ------------------------------- - -- ------ -------- - --------------------------- - -
在上面的代码中,我们定义了一个 MY_DEPENDENCY_TOKEN
和 MyDependencyType
,并将 myDependency
依赖注入到了 MyClass
构造函数中。这允许我们将 myDependency
对象直接替换为测试模拟对象,并且这个代码的实现并不知道它们有没有被更改。
测试
测试是任何软件开发项目的重要组成部分。在 Deno 中,我们可以使用内置的测试框架 test
来测试我们的模块。通常,我们将测试文件放在与被测试的模块相同的目录中,并使用 test('should ...', () => { ... })
函数来定义测试用例。
-- -------------------- ---- ------- -- -------------- ------ - ------ - ---- ------------------------------------------- ------ - ------- - ---- -------------- ------------ ----- --------- -- -- - ----- ------ - -------------- ------- --- ------------------- -------------------------- --- --- ---
在上面的代码中,我们首先导入 assert
函数和 MyClass
,然后定义了一个测试用例来检查 MyClass.method
是否输出了 "Hello World!"
。我们使用 spyOn
函数来模拟控制台日志方法,并使用 assert
函数来验证测试是否通过。
可以通过运行 deno test
命令来运行测试。
发布模块
发布模块可以使您的代码被使用,并可以使您的代码更容易地与其他人合作。Deno 的模块发布方式基于 URL,您只需使用 deno.land/x
上的 URL 来标识您的模块即可。具体来说,您只需将您的 mod.ts
文件提交到一个 Git 存储库,并使用以下格式的 URL 进行访问:
https://deno.land/x/{module-name}/mod.ts
其中的 {module-name}
即您的模块名。例如,在 github.com/my-user/my-module
存储库中,您可以使用以下 URL:
https://deno.land/x/my-module/mod.ts
这将下载并执行 mod.ts
文件。当然,发布模块还需要一些其他的元数据,例如版本和描述等。您可以考虑使用 DenoLand 上的 dempublish
工具来管理这些信息和发布您的模块。
结论
本文演示了如何在 Deno 中编写模块,并引入了依赖注入、测试和发布模块等概念。Deno 的模块加载方式为为开发人员提供了更多的选择,而内置的测试框架使编写测试变得更加容易。希望本文能帮助您轻松地开发好的 Deno 模块。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67373f12317fbffedf09203c