メインコンテンツまでスキップ

npm の依存関係を使用する

Kotlin/JS プロジェクトでは、すべての依存関係を Gradle プラグインを通じて管理できます。これには、kotlinx.coroutineskotlinx.serialization、または ktor-client などの Kotlin/Multiplatform ライブラリが含まれます。

npm から JavaScript パッケージに依存する場合、Gradle DSL は npm 関数を公開します。これにより、npm からインポートするパッケージを指定できます。is-sorted という NPM パッケージのインポートについて考えてみましょう。

Gradle ビルドファイル内の対応する部分は次のようになります。

dependencies {
// ...
implementation(npm("is-sorted", "1.0.5"))
}

JavaScript モジュールは通常、動的に型付けされ、Kotlin は静的に型付けされた言語であるため、一種のアダプターを提供する必要があります。Kotlin では、このようなアダプターは 外部宣言 と呼ばれます。1 つの関数のみを提供する is-sorted パッケージの場合、この宣言は記述するのにわずかな労力で済みます。ソースフォルダー内に is-sorted.kt という新しいファイルを作成し、次の内容を入力します。

@JsModule("is-sorted")
@JsNonModule
external fun <T> sorted(a: Array<T>): Boolean

CommonJS をターゲットとして使用している場合、@JsModule および @JsNonModule アノテーションを適宜調整する必要があることに注意してください。

この JavaScript 関数は、通常の Kotlin 関数とまったく同じように使用できるようになりました。ヘッダーファイルで型情報を提供したため(パラメーターと戻り値の型を単に dynamic と定義するのとは対照的に)、適切なコンパイラーサポートと型チェックも利用できます。

console.log("Hello, Kotlin/JS!")
console.log(sorted(arrayOf(1,2,3)))
console.log(sorted(arrayOf(3,1,2)))

これらの 3 行をブラウザーまたは Node.js のいずれかで実行すると、出力は sorted の呼び出しが is-sorted パッケージによってエクスポートされた関数に適切にマッピングされたことを示しています。

Hello, Kotlin/JS!
true
false

JavaScript エコシステムには、パッケージ内で関数を公開する複数の方法があるため(たとえば、名前付きエクスポートまたはデフォルトエクスポートを通じて)、他の npm パッケージでは、外部宣言の構造をわずかに変更する必要がある場合があります。

宣言の記述方法の詳細については、Calling JavaScript from Kotlin を参照してください。