Загрузить файл ресурсов (json) в kotlin js - PullRequest
0 голосов
/ 12 марта 2019

Учитывая этот код, куда мне поместить файл .json, чтобы его можно было найти во время выполнения?

// path: src/main/kotlin/Server.kt
fun main() {
  val serviceAccount = require("file.json")
}

Я попытался поместить его в src / main / resources / без удачи. Я также использую Gradle для компиляции kotlin в js с помощью kotlin2js плагина.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Предполагая, что компилятор Kotlin помещает созданный файл JS (скажем, server.js) в расположение по умолчанию в build/classes/kotlin/main, а файл ресурсов (file.json) в build/resources/main.

И вы запускаете server.js, выполняя node build/classes/kotlin/main/server.js

Согласно документации NodeJS:

Локальные модули и файлы JSON могут быть импортированы с использованием относительного пути (например, ./, ./foo, ./bar/baz, ../foo), который будет разрешен в каталоге с именем __dirname (если определяется) или текущий рабочий каталог. (https://nodejs.org/api/modules.html#modules_require_id)

В нашем случае __dirname - это build/classes/kotlin/main

Таким образом, правильное утверждение требует:

val serviceAccount = js("require('../../../resources/main/file.json')") 

или если require определено как функция Котлина, как в вопросе

val serviceAccount = require("../../../resources/main/file.json") 
0 голосов
/ 12 марта 2019

Вы можете просто использовать js("require('./file.json')"), если у вас нет импорта для функции require в Kotlin.Результат будет dynamic, поэтому вы можете привести его к Map.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.js/js.html

...