モジュールのインポートとエクスポート
この節で学ぶこと
- import を使うとモジュールを導入し使用できます。ローカルファイルシステムにあってもリモートにあってもどこにあるモジュールでもインポートできます。
- インポートは URL かファイルシステムのパスで指定します
- export を使うとモジュールの一部を指定して、そのモジュールをインポートしたいユーザーがアクセスできるようになります
概要
Deno はデフォルトでモジュールのインポート方法を標準化しています。JavaScript でも TypeScript でも ECMAScript 6 の import/export
標準仕様に従ってインポートできます。
モジュール解決にはブラウザに似た方法を採用しています。とはつまり、ファイル名は完全な形で指定する必要があるということです。ファイル拡張子は省略できませんし、index.js
の例外的な挙動もありません。
import {
add,
multiply,
} from "./arithmetic.ts";
依存関係も直接インポートできます。パッケージ管理が間に入ることはありません。 ローカルモジュールとリモートモジュールは全く同じやり方でインポートできます。 以下の例でお見せするとおり、ローカルでもリモートでもモジュールのインポートに全く同じ機能性が提供されています。
ローカルのインポート
次の例では add
関数と multiply
関数がローカルの arithmetic.ts
モジュールからインポートされています。
Command: deno run local.ts
/**
* 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));
/**
* Output
*
* 60
* 82.8
*/
リモートのインポート
上のローカルインポートの例では add
メソッドと multiply
メソッドがローカルに保存された arithmetic モジュールからインポートされていました。同じ機能性がリモートモジュールから add
メソッドと multiply
メソッドをインポートするときにも提供されます。
この例では Rambda モジュールがバージョン番号付きで参照されています。 JavaScript モジュールが TypeScript モジュールに直接インポートされている点にも留意してください。 Deno ではこういったことが問題なく行なえます。
Command: deno run ./remote.ts
/**
* 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));
/**
* Output
*
* 60
* 82.8
*/
エクスポート
上のローカルインポートの例では add
関数と multiply
関数がローカルに保存された arithmetic モジュールからインポートされていました。これを可能にするためには、arithmetic モジュールに保存された関数がエクスポートされている必要があります。
そのためには、以下でお見せするように export
キーワードを関数シグニチャの前に付けるだけです。
/**
* arithmetic.ts
*/
export function add(a: number, b: number): number {
return a + b;
}
export function multiply(a: number, b: number): number {
return a * b;
}
どんな関数、クラス、定数、変数も、外部モジュールからアクセスできるようにするにはエクスポートする必要があります。export
キーワードを宣言に前に付けるか、あるいはファイルの下部に export 文を書くことによりエクスポートできます。