简中文档
On this page

模块元数据

概念 Jump to heading

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

示例 Jump to heading

下面的示例使用两个模块来展示 import.meta.urlimport.meta.mainDeno.mainModule 之间的差异。在这个示例中,module_a.ts 是主模块入口点:

module_b.ts
export function outputB() {
  console.log("模块 B 的 import.meta.url", import.meta.url);
  console.log("模块 B 的 mainModule url", Deno.mainModule);
  console.log(
    "模块 B 通过 import.meta.main 判断是否为主模块?",
    import.meta.main,
  );
}
module_a.ts
import { outputB } from "./module_b.ts";

function outputA() {
  console.log("模块 A 的 import.meta.url", import.meta.url);
  console.log("模块 A 的 mainModule url", Deno.mainModule);
  console.log(
    "模块 A 通过 import.meta.main 判断是否为主模块?",
    import.meta.main,
  );
  console.log(
    "解析 ./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 的输出为:

模块 A 的 import.meta.url file:///home/alice/deno/module_a.ts
模块 A 的 mainModule url file:///home/alice/deno/module_a.ts
模块 A 通过 import.meta.main 判断是否为主模块? true
解析 ./module_b.ts 的说明符 file:///home/alice/deno/module_b.ts

模块 B 的 import.meta.url file:///home/alice/deno/module_b.ts
模块 B 的 mainModule url file:///home/alice/deno/module_a.ts
模块 B 通过 import.meta.main 判断是否为主模块? false

你找到了你需要的东西吗?

编辑此页面
隐私政策