使用 gradle 创建 Kotlin React 应用程序
Creating a Kotlin React App using gradle
我一直期待如何使用 gradle 创建一个 kotlin-react-app(我知道 create-kotlin-react-app CLI 工具,它不使用 radle)和我找不到任何消息来源来指导我。我偶然发现了 kotlin 前端插件(有效)以及 npm 和 webpack 插件,但我无法将它们配置为 run/create 我是一个 kotlin-react-project。我不是配置 webpack 的专家,所以对我来说可能更难。
初衷
我打算创建一个多平台项目(是的,在 IntelliJ 中打包的 kotlin experiental)
替代方法
当我失败时,我选择了这种方法。
- 使用 kotlin 多平台插件编写我的代码
- 编译成jar
- 将其作为库添加到我创建的 create-react-kotlin-app 中
- 运行 等待奇迹发生(ddnt)
事实证明,一些预配置的 webpack 无法编译,因为它在编译期间不可用。但是 IDE 运行良好,甚至提供了代码完成
谁能给我指明方向?
使用 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
}
希望对您有所帮助。
快乐黑客
对于任何正在寻找最新解决方案的人:随着 kotlin 1.4-M2 的发布,您可以使用 Intellij Idea 的实验项目向导来创建具有 ktor 后端和 kotlin-react 前端的全栈网络应用程序
我一直期待如何使用 gradle 创建一个 kotlin-react-app(我知道 create-kotlin-react-app CLI 工具,它不使用 radle)和我找不到任何消息来源来指导我。我偶然发现了 kotlin 前端插件(有效)以及 npm 和 webpack 插件,但我无法将它们配置为 run/create 我是一个 kotlin-react-project。我不是配置 webpack 的专家,所以对我来说可能更难。
初衷
我打算创建一个多平台项目(是的,在 IntelliJ 中打包的 kotlin experiental)
替代方法
当我失败时,我选择了这种方法。
- 使用 kotlin 多平台插件编写我的代码
- 编译成jar
- 将其作为库添加到我创建的 create-react-kotlin-app 中
- 运行 等待奇迹发生(ddnt) 事实证明,一些预配置的 webpack 无法编译,因为它在编译期间不可用。但是 IDE 运行良好,甚至提供了代码完成
谁能给我指明方向?
使用 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
}
希望对您有所帮助。
快乐黑客
对于任何正在寻找最新解决方案的人:随着 kotlin 1.4-M2 的发布,您可以使用 Intellij Idea 的实验项目向导来创建具有 ktor 后端和 kotlin-react 前端的全栈网络应用程序