Вы пробовали на самом деле запустить вышеуказанный код? Если да, что происходит? В этом вопросе есть некоторая двусмысленность, поэтому трудно точно определить, в чем именно заключается проблема.
В любом случае, позвольте мне поделиться тем, что мне удалось сделать, быстрым и грязным способом. Возможно, это доказательство концепции разблокирует вас.
- Я создал такой Kotlin файл в своем проекте Kotlin / JS:
class TestLibraryClass {
@JsName("appendNumberToString")
fun appendNumberToString(string: String, number: Int) =
"Appending: $string - $number"
fun functionWithoutJsNameAnnotation(someStr: String)
= someStr
}
Я создал проект и получил JS файл результата в build/distributions/project-name.js
.
Я открыл любую веб-страницу в веб-браузере с JS консоль и вставьте код файла project-name.js
следующим образом - это эквивалент вашей попытки с require
:
importedKotlinLib = ...pasted the code here...
[hit enter]
Я создал экземпляр
TestLibraryClass
:
testLibraryClassInstance = new importedKotlinLib.TestLibraryClass()
Мне удалось вызвать обе функции, первую с пользовательским именем, чтобы избежать искажения имени, а вторая присутствовала с искаженным именем:

Я узнал об искажении имен (и как обойти это) здесь . Обратите внимание, что имя класса TestLibraryClass
не искажено. Я проверял, что имена функций верхнего уровня искажены.
Что касается общей картины - если она официально поддерживается для подготовки JS библиотек, написанных в Kotlin - у меня нет полной ясности здесь , Я буду рад обновить этот ответ, как только узнаю. Я также собираюсь включить Kotlin / JS в проекты моей компании.