首页 > 解决方案 > 在 kotlin js 中加载资源文件(json)

问题描述

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

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

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

标签: kotlinkotlin-multiplatformkotlin-js-interopkotlin-jskotlin2js

解决方案


假设 Kotlin 编译器将创建的 JS 文件(例如server.js)放入默认位置 atbuild/classes/kotlin/main并将资源文件(file.json)放入build/resources/main.

你正在server.js通过执行运行node build/classes/kotlin/main/server.js

根据 NodeJS 文档:

可以使用相对路径(例如 ./、./foo、./bar/baz、../foo)导入本地模块和 JSON 文件,该路径将针对 __dirname(如果已定义)或当前工作目录命名的目录进行解析目录。 ( https://nodejs.org/api/modules.html#modules_require_id )

在我们的例子__dirname中是build/classes/kotlin/main

所以正确的require语句是:

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

或者如果require被定义为问题中的 Kotlin 函数

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

推荐阅读