模块元数据
概念
- import.meta 可以提供有关模块上下文的信息。
- 布尔值 import.meta.main 可以告诉您 当前模块是否为程序入口点。
- 字符串 import.meta.url 将为您提供 URL 当前模块的 URL。
- import.meta.resolve 允许您 解决相对于当前模块的说明符。如果在启动时提供了导入映射,则此函数将考虑该映射。
- 字符串 Deno.mainModule 将为您提供模块的 URL 主模块入口点,即 deno 运行时调用的模块。
示例
下面的示例使用两个模块来显示import.meta.url
,import.meta.main
和Deno.mainModule
之间的区别。
在这个例子中, module_a.ts
是主模块入口点:
/**
* module_b.ts
*/
export function outputB() {
console.log("Module B's import.meta.url", import.meta.url);
console.log("Module B's mainModule url", Deno.mainModule);
console.log(
"Is module B the main module via import.meta.main?",
import.meta.main,
);
}
/**
* module_a.ts
*/
import { outputB } from "./module_b.ts";
function outputA() {
console.log("Module A's import.meta.url", import.meta.url);
console.log("Module A's mainModule url", Deno.mainModule);
console.log(
"Is module A the main module via import.meta.main?",
import.meta.main,
);
console.log(
"Resolved specifier for ./module_b.ts",
import.meta.resolve("./module_b.ts"),
);
}
outputA();
console.log("");
outputB();
如果 module_a.ts
位于 /home/alice/deno
,则
deno run --allow-read module_a.ts
的输出如下:
Module A's import.meta.url file:///home/alice/deno/module_a.ts
Module A's mainModule url file:///home/alice/deno/module_a.ts
Is module A the main module via import.meta.main? true
Resolved specifier for ./module_b.ts file:///home/alice/deno/module_b.ts
Module B's import.meta.url file:///home/alice/deno/module_b.ts
Module B's mainModule url file:///home/alice/deno/module_a.ts
Is module B the main module via import.meta.main? false