问题描述
我一直在阅读书籍并尝试 Kotlin 全栈开发示例,但它们都有一个共同点,即它们是为 SPA 应用程序构建的,并且客户端的逻辑很重。相反,我想构建一个 Web 应用程序,其中服务器端的业务逻辑很重,而客户端则很轻,主要用于用户交互。我想使用服务器端渲染(典型的路由注释 GetMapping 和 PostMapping,使用 freemarker 或 thymeleaf 模板)构建一个传统的 Spring Boot JVM 应用程序,而客户端则很轻,主要使用基本技术完成。
所以我的问题是,是否可以设置 Kotlin JS 以便我可以在 Kotlin 而不是 Javascript 中编写客户端逻辑?我不需要前端框架,也许至多是 JQuery,仅此而已。基本上,只是一个传统的服务器端应用程序,但是客户端代码是用 Kotlin JS 用 Kotlin 编写的。
这对 Kotlin 多平台可行吗?如果是这样,谁能告诉我如何在 IntelliJ 中设置这样的项目?谢谢。
解决方法
是的,这是可能的。请记住,Kotlin Multiplatform 是在目标之间共享代码的平台。例如,您可以将一些 DTO 模型存储在一个公共项目中,并在您的 Kotlin JVM 后端和 Kotlin JS 前端之间共享。 您要求使用 Kotlin JS,它可以在没有多平台设置的情况下使用。因此,如果您不需要共享公共代码,您可以简单地添加单独的 koltin-js 模块,该模块生成一个 javasctipt 文件 n build.gradle 。这可以由 spring 提供并包含在模板生成的 html 文件中:
index.html
<html>
<body>
<!-- Link to the compiled js files-->
<script src="kotlin.js"></script>
<!-- Link to the compiled js files-->
<script src="output.js"></script>
</body>
</html>
build.gradle.kts
plugins {
id("kotlin2js") version "1.5.0"
}
dependencies {
implementation(kotlin("stdlib-js"))
}
repositories {
jcenter()
mavenCentral()
}
tasks {
compileKotlin2Js {
kotlinOptions {
outputFile = "${sourceSets.main.get().output.resourcesDir}/output.js"
sourceMap = true
}
}
}
您可以在这里找到一个不使用任何框架的简单 Kotlin-JS 项目: https://github.com/TobseF/KotlinJsGameWishlist
Kotlin 多平台由于公共代码模块而更加强大。所以应该也有可能。