8

我一直在期待如何使用 gradle 创建一个 kotlin-react-app(我知道 create-kotlin-react-app CLI 工具,它不使用 radle),但我无法找到任何来源我通过。我偶然发现了 kotlin 前端插件(它可以工作)以及 npm 和 webpack 插件,但我无法将它们配置为运行/创建一个 kotlin-react-project。我不是配置 webpack 的专家,所以对我来说可能更难。

最初的意图

我打算创建一个多平台项目(是的,在 IntelliJ 中打包的 kotlin 体验)

替代方法

当我失败时,我选择采用这种方法。

  1. 使用 kotlin 多平台插件编写我的代码
  2. 编译成jar
  3. 将其作为库添加到我要创建的 create-react-kotlin-app 中
  4. 运行并等待魔法发生(它 ddnt) 结果是,预配置的 webpack 无法编译,因为它在编译时不可用。但 IDE 运行良好,甚至提供了代码补全

有人可以指点我一个方向吗?

4

2 回答 2

10

使用 kotlin 前端插件时,使用 gradle 构建 React 应用程序很容易。在 IntelliJ 中,按照以下步骤操作

新模块 > gradle > kotlin (Javascript) > [next,next,next...finish]

当然,您必须配置 gradle(根据您的喜好)。

我配置我的如下所示: -

buildscript {
    ext.kotlin_version = '1.2.41'
    ext.kotlinx_html_version = "0.6.4"
    ext.kotlin_frontend_version = "0.0.30"
    ext.react_version = "16.4.0-pre.31-kotlin-$kotlin_version"
    ext.react_dom_version = "16.4.0-pre.31-kotlin-$kotlin_version"
    repositories {
        mavenCentral()
        maven {
            url "https://dl.bintray.com/kotlin/kotlin-eap"
        }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-frontend-plugin:$kotlin_frontend_version"
    }
}
apply plugin: 'org.jetbrains.kotlin.frontend'
apply plugin: 'kotlin2js'
sourceCompatibility = 1.8
repositories {
    mavenLocal()
    mavenCentral()
    jcenter()
    maven { url "http://dl.bintray.com/kotlin/kotlin-dev" }
    maven { url "http://dl.bintray.com/kotlinx/kotlinx" }
    maven { url "http://dl.bintray.com/kotlin/kotlin-js-wrappers" }
}
dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
    compile "org.jetbrains.kotlinx:kotlinx-html-js:$kotlinx_html_version"
    compile "org.jetbrains:kotlin-react:$react_version"
    compile "org.jetbrains:kotlin-react-dom:$react_dom_version"
}
kotlinFrontend {
    npm {
        dependency "style-loader" // production dependency
        dependency "react"
        dependency "react-dom"
        dependency "kotlin"
        dependency "@jetbrains/kotlin-extensions"
        dependency "@jetbrains/kotlin-react"
    }
    webpackBundle {
        bundleName = "main"
        sourceMapEnabled = false   // enable/disable source maps
        contentPath = file("${projectDir}/public") // a file that represents a directory to be served by dev server)
        publicPath = "/"  // web prefix
        host = "localhost" // dev server host
        port = 8088   // dev server port
        stats = "errors-only"  // log level
    }
}
task copyDocs(type: Copy) {
    println ":md-react:copyDocs: Copying to public directory"
    from("${projectDir}/build/bundle") {
        include "**/*.js"
        include "*.js"
    }
    into "${projectDir}/public/static"
    println ":md-react:copyDocs: Done copying"
}
task assembleWeb(type: Sync) {
    configurations.compile.each { File file ->
        from(zipTree(file.absolutePath), {
            includeEmptyDirs = false
            include { fileTreeElement ->
                def path = fileTreeElement.path
                (path.endsWith(".js") || path.endsWith(".map")) && (path.startsWith("META-INF/resources/") ||
                        !path.startsWith("META-INF/"))
            }
        })
    }
    from compileKotlin2Js.destinationDir
    into "${projectDir}/build/classes/main"
    dependsOn classes
}
//run.dependsOn copyDocs
assemble.dependsOn assembleWeb
copyDocs.dependsOn bundle
//assemble.finalizedBy(copyDocs)
compileKotlin2Js {
    kotlinOptions.outputFile = "${projectDir}/build/classes/main/web.js"
    kotlinOptions.moduleKind = "umd"
    kotlinOptions.sourceMap = true
}

希望这对您有所帮助。

快乐黑客

于 2018-06-14T00:29:05.293 回答
1

对于任何寻求更新解决方案的人:随着kotlin 1.4-M2的发布,您可以使用 Intellij Idea 的实验项目向导来创建具有 ktor 后端和 kotlin-react 前端的全栈 Web 应用程序

于 2020-06-05T07:45:34.053 回答