在 kotlin js 中加载资源文件(json)

Dio*_*lor 5 kotlin kotlin-js-interop kotlin-multiplatform kotlin-js kotlin2js

鉴于此代码,我应该将 file.json 放在哪里才能在运行时中找到?

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

我试着把它放在 src/main/resources/ 下,但没有运气。我还使用 Gradle 将 kotlin 编译为带有kotlin2js插件的js 。

Ale*_*ger 5

假设 Kotlin 编译器将创建的 JS 文件(例如server.js)放入默认位置 atbuild/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

在我们的例子中__dirnamebuild/classes/kotlin/main

所以正确的 require 语句是:

val serviceAccount = js("require('../../../resources/main/file.json')") 
Run Code Online (Sandbox Code Playgroud)

或者 ifrequire被定义为 Kotlin 函数,如问题中所示

val serviceAccount = require("../../../resources/main/file.json") 
Run Code Online (Sandbox Code Playgroud)


Eug*_*nko 0

js("require('./file.json')")如果您在 Kotlin 中没有导入该函数,则可以直接使用require。结果将是dynamic,因此您可以将其投射到Map.

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

  • 将如何解决这个问题?我看到 `require("file.json")` 或 `js("require('file.json')")` 将生成相同的 JavaScript 代码:`require('file.json')`。问题仍然是在路径中找不到 file.json。准确地说,有一个例外:“错误:找不到模块‘file.json’” (3认同)