从 ktor 提供 kotlin 多平台 javascript

Posted

技术标签:

【中文标题】从 ktor 提供 kotlin 多平台 javascript【英文标题】:Serve kotlin multiplatform javascript from ktor 【发布时间】:2019-12-21 04:24:35 【问题描述】:

我已经建立了一个多模块的 gradle 项目,其中包含一个 common 模块和一个 ktor 模块。

通用模块是一个 kotlin 多平台库。

当我从 Intellij 运行它时,我希望能够提供从 ktor 服务器的公共库生成的 javascript 文件。

目前 ktor 设置为将资源作为静态内容提供服务:

    static("/static") 
        resources()
    

ktor模块对common模块有依赖:

dependencies 
    compile project(':common')
    ...

我假设在 Intellij 中运行时能够浏览到 http://localhost:8080/static/common.js 以检索公共模块 JS 构建的输出(写入 common\build\classes\kotlin\js\main),但这不起作用。

【问题讨论】:

【参考方案1】:

通过包含复制任务来解决此问题。请注意,这里的 kotlin 全栈 mpp (https://github.com/ktorio/ktor-samples/tree/master/mpp/fullstack-mpp) 有一个使用 webpack 输出的示例。

kotlin 
    jvm() 
        task copyJsToJvm(type: Copy) 
            from("$buildDir/classes/kotlin/js/main")
            include '*.*'
            into "$buildDir/classes/kotlin/jvm/main"
        
        compilations.main 
            tasks.getByName(processResourcesTaskName) 
                dependsOn(copyJsToJvm)
            
        
    
...

【讨论】:

以上是关于从 ktor 提供 kotlin 多平台 javascript的主要内容,如果未能解决你的问题,请参考以下文章

Ktor + React 项目配置

Ktor 多平台 - 在 kotlin 中用于 iOS 的 SSL 固定

在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件

Kotlin 中的多平台 InputStream 替代方案?

是否可以使用 Ktor 和/或 Kotlin 多平台在 Rest API 和 Android 应用程序之间“共享”公开的数​​据?

Kodein + Ktor = 冻结 kotlin.collections.HashMap 的突变尝试 - 为啥?