跳至主要内容
在本页

模块元数据

概念 跳转到标题

  • import.meta 可以提供有关模块上下文的資訊。
  • 布尔值 import.meta.main 将让你知道当前模块是否是程序入口点。
  • 字符串 import.meta.url 将给出当前模块的 URL。
  • 字符串 import.meta.filename 将给出当前模块的完全解析路径。仅限本地模块
  • 字符串 import.meta.dirname 将给出包含当前模块的目录的完全解析路径。仅限本地模块
  • import.meta.resolve 允许你相对于当前模块解析说明符。此函数会考虑导入映射(如果在启动时提供了)。
  • 字符串 Deno.mainModule 将给出主模块入口点的 URL,即由 deno 运行时调用的模块。

示例 跳转到标题

下面的示例使用两个模块来展示import.meta.urlimport.meta.mainDeno.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