如何将Kotlin文件编译为JavaScript



嗨,我开始在Node上使用KotlinJS,我放了一个非常简单的kotlin文件,我想使用原始kotlinc-js编译器编译它不使用渐变

package main
fun heavy() {
(1..10_000_000).forEach { it*it }
}
fun main() {
heavy()
println("Bye JS")
}

以下是我尝试过但没有成功的make命令:

build-js:
kotlinc-js main.kt -output main.kt.js

它编译得很好,但当我尝试运行node main.kt.js:时

throw new Error("加载模块'main.kt'时出错。它的依赖项未找到"kotlin"。请先检查"kotlin"是否已加载至'main.kt');^

错误:加载模块"main.kt"时出错。它的依赖项"kotlin"不是建立请检查"kotlin"是否在"main.kt"之前加载。在对象处。(/home/nanospicer/KtlinProjects/KotlinScripting/main.kt.js:2:9)在模块中_compile(节点:internal/modules/cjs/loader:1101:14)位于Object.Module_extensions..js(节点:internal/modules/cjs/loader:1153:10)在Module.load(节点:internal/modules/cjs/loader:981:32)位于Function.Module_load(节点:internal/modules/cjs/loader:822:12)在Function.executeUserEntryPoint[作为runMain](节点:internal/modules/run_main:79:12)在节点:internal/main/run_main_module:17:47

好的,所以我认为它缺少kotlin运行时。我将尝试与JVM编译器相同的参数:-include-runtime,这会导致错误:

错误:无效参数:-include运行时info:使用-帮助获取更多信息

然后我尝试了:

build-js:
kotlinc-js main.kt -kotlin-home "/mnt/c/Program Files/JetBrains/IntelliJ IDEA Community Edition 2021.2.1/plugins/Kotlin/kotlinc/" -libraries "/mnt/c/Program Files/JetBrains/IntelliJ IDEA Community Edition 2021.2.1/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-js.jar" -module-kind commonjs -main call -output main.kt.js

但它仍然会导致同样的错误。我还尝试删除libraries标志,但也不起作用

我找到了罪魁祸首。

我基本上从IntelliJ IDEA创建了一个nodejs项目,并快速阅读了渐变任务,这暗示我它正在为我准备一个节点环境。

我快速浏览了npm.js,发现实际上有一个名为kotlin的包,它是编译器的javascript的stdlib。

我终于调整了Makefile上的build命令,使用了一个类似common-js的模块,结果成功了!

//Definitive main.kt I ended up using
fun heavy() {
(1..100_000_000).forEach { it*it }
}
fun main() {
heavy()
println("Bye JS")
}

使用npm:安装kotlin的stdlib

$ npm i kotlin --save

我的Makefile构建命令看起来像:

$ kotlinc-js main.kt -module-kind commonjs -main call -output main.kt.js

论点的小分解:

  • -module-kind commonjs它告诉编译器为节点项目生成代码样式(不完全是这样,但你得到了要点)
  • -main call确定编译后的模块是否应该调用主函数。这是因为如果我们将值设置为noCall,我们就不会运行主函数,它的行为可能就像一个库
  • -output main.kt.js是我自己毫无理由地选择的名称,只要它是.js文件,你就可以运行它,但我想保持它这样,以便将它与我正在生成的另一个main.js文件进行比较

相关内容

  • 没有找到相关文章

最新更新