Использование зависимостей из npm
В проектах Kotlin/JS все зависимости можно управлять с помощью плагина Gradle. Это включает в себя библиотеки Kotlin/Multiplatform, такие как kotlinx.coroutines, kotlinx.serialization, или ktor-client.
Для зависимости от JavaScript-пакетов из npm, Gradle DSL предоставляет функцию npm, позволяющую указать пакеты, которые нужно импортировать из npm. Рассмотрим импорт пакета npm под названием is-sorted.
Соответствующая часть в файле Gradle выглядит следующим образом:
dependencies {
// ...
implementation(npm("is-sorted", "1.0.5"))
}
Поскольку JavaScript-модули обычно динамически типизированы, а Kotlin — статически типизированный язык, вам нужен адаптер. В Kotlin такие адаптеры называются внешними объявлениями. Для пакета 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)))
Выполнение этих трех строк в браузере или Node.js покажет, что вызов sorted был корректно сопоставлен с функцией, экспортированной пакетом is-sorted.
Hello, Kotlin/JS! true false
Поскольку в JavaScript-экосистеме существуют различные способы экспорта функций в пакете (например, с помощью именованных или стандартных экспортов), другим пакетам npm может потребоваться слегка изменённая структура внешних объявлений.
Чтобы узнать больше о написании объявлений, обратитесь к Вызову JavaScript из Kotlin.
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/using-packages-from-npm.html