Deno 是一个由 Ryan Dahl 创建的 JavaScript/TypeScript 运行时。它与 Node.js 不同,不需要使用 npm 打包和加载模块,而是直接使用 HTTP 导入模块。在 Deno 中,你可以使用绝对和相对路径导入本地模块。本篇文章将会介绍如何加载本地模块,并提供示例代码。
相对路径
使用相对路径导入一个本地模块的方式是相对于执行命令的当前工作目录。例如,如果我们有一个名为 "foo" 的模块,那么在该模块所在的目录中创建一个名为 "main.ts" 的文件,并将其作为入口文件。在 "main.ts" 文件中,我们可以使用相对路径导入 "foo" 模块:
// main.ts import * as foo from './foo.ts';
这里,"./foo.ts" 表示 "foo.ts" 在当前目录中的相对路径。
如果有另一个名为 "baz" 的模块位于 "foo" 模块的目录中,我们可以使用相对路径导入 "baz" 模块:
// foo.ts import * as baz from './baz.ts';
这里,"./baz.ts" 表示 "baz.ts" 在 "foo.ts" 所在目录的相对路径。
绝对路径
使用绝对路径导入本地模块的方式是使用文件系统路径导入模块。在 Deno 中,绝对路径必须以 "file://" 开头。例如,如果有一个名为 "bar" 的模块,其绝对路径为 "/path/to/bar.ts",我们可以在 "main.ts" 中使用以下代码导入 "bar" 模块:
// main.ts import * as bar from 'file:///path/to/bar.ts';
这里,"file:///path/to/bar.ts" 表示 "bar.ts" 的绝对路径。
钩子 (Hook)
Deno 提供了一种称为 "钩子" 的机制,可以在模块被导入之前修改其路径。这在将模块链接到不同的位置时非常有用。例如,如果我们有一个名为 "baz" 的模块,其绝对路径为 "/path/to/baz.ts",我们可以在其被导入之前用钩子将其路径加上一个前缀:
// javascriptcn.com 代码示例 // main.ts import { setResolver } from 'https://deno.land/x/snowpack/mod.ts'; setResolver((specifier: string, referrer: string | undefined, _context: any, _defaultResolver: any) => { if (specifier === 'local:///path/to/baz.ts') { return '/path/to/baz.ts'; } return specifier; }); import * as baz from 'local:///path/to/baz.ts';
这里,我们使用 snowpack 模块的 setResolver() 方法设置了一个钩子,它会将以 "local://" 开头的模块路径映射到我们指定的路径。然后,在导入此模块时,我们可以使用 "local:///path/to/baz.ts" 的路径。
总结
Deno 带有直接导入模块的方式,使用相对或者绝对路径。钩子机制可以帮助开发者在导入模块时做出路径修改。这些方式都提供了一种灵活的方式来导入本地模块,无需使用 npm 或其他包管理器。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6543930d7d4982a6ebd5e193