导入和导出模块

默认情况下,Deno标准化了在 JavaScript 和 TypeScript 中导入模块的方式。

它遵循 ECMAScript 6 import/export 标准,但有一个警告,文件类型(后缀名)必须包含在 import 语句的末尾。

import {
  add,
  multiply,
} from "./arithmetic.ts";

依赖项也直接导入,没有包管理开销。本地模块的导入方式与远程模块完全相同。

如下面的示例所示,可以使用本地或远程模块以相同的方式产生相同的功能。

本地导入

在这个例子中,addmultiply 函数是从本地的 arithmetic.ts 模块导入的。

命令: deno run local.ts

import { add, multiply } from "./arithmetic.ts";

function totalCost(outbound: number, inbound: number, tax: number): number {
  return multiply(add(outbound, inbound), tax);
}

console.log(totalCost(19, 31, 1.2));
console.log(totalCost(45, 27, 1.15));

/**
 * 输出:
 *
 * 60
 * 82.8
 */

导出

在上面的示例中,addmultiply 函数是从本地存储的算术模块导入的。为此,必须导出存储在运算模块中的功能。

只需将关键字 export 添加到函数签名的开头,如下所示。

export function add(a: number, b: number): number {
  return a + b;
}

export function multiply(a: number, b: number): number {
  return a * b;
}

需要在外部模块中访问的所有函数、类、常量和变量都必须导出。可以在它们的前面加上 export 关键字,也可以将它们包括在文件底部的 export 语句中。

要了解有关 ECMAScript 导出功能的更多信息,请阅读 MDN 文档.

远程导入

在上面的本地导入示例中,从本地存储的算术模块中导入了 addmultiply 方法。 也可以通过从远程模块导入 addmultiply 方法来实现相同的功能。

在这种情况下,可以导入 Ramda 模块,包括版本号。Deno 可以处理 JavaScript 模块直接导入到 TypeSript 模块的情况。

命令: deno run ./remote.ts

import {
  add,
  multiply,
} from "https://x.nest.land/ramda@0.27.0/source/index.js";

function totalCost(outbound: number, inbound: number, tax: number): number {
  return multiply(add(outbound, inbound), tax);
}

console.log(totalCost(19, 31, 1.2));
console.log(totalCost(45, 27, 1.15));

/**
 * 输出:
 *
 * 60
 * 82.8
 */