我想在Kotlin/JS中进行服务器端开发!
你好,我是Mayamito。
这次我用Kotlin/JS和kotlinx-nodejs搭建了一个简单的服务器示例。
kotlinx-nodejs的介绍
kotlinx-nodejs提供了Node.js API的Kotlin封装。可以将其视为TypeScript中的d.ts文件集合。详见https://github.com/Kotlin/kotlinx-nodejs。
引入
在 build.gradle 中添加一个依赖并将目标设为 nodejs。
repositories {
mavenCentral()
jcenter() // 追加
}
dependencies {
implementation(kotlin("stdlib-js"))
implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7") // 追加
}
kotlin.js {
nodejs() // 追加
}
尝试编写一个简单的HTTP服务器。
如果收到请求,我将尝试编写一个简单的服务器,只需返回其URL和方法即可。
fun main() {
val server = http.createServer { req, res ->
res.write("url: ${req.url}\n")
res.write("method: ${req.method}")
res.end()
}
server.listen(8080)
}
如果你有使用Node.js编写服务器的经验,可能会知道一些内置函数的用法并没有太大变化。尽管我是Node的初学者,但我几乎可以将用JavaScript编写的示例代码直接转换成Kotlin。
启动服务器
在终端里
./gradlew nodeRun
当你执行这个操作时,在指定的端口(本例中是8080)上会启动服务器。
实际上,使用curl进行测试的时候会得到如下的结果。
curl -X GET localhost:8080/hoge
url: /hoge
method: GET
curl -X POST localhost:8080/hoge
url: /hoge
method: POST
将代码编译为JS
如果想要通过使用Node命令来执行JS文件,而不是通过Gradle来进行,那么需要进行一些额外的配置。
首先,在 build.gradle 文件中添加 webpack-node-externals 的依赖,并将 browser 添加为目标。
dependencies {
implementation(kotlin("stdlib-js"))
implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7")
implementation(npm("webpack-node-externals", "2.5.1")) // 追加
}
kotlin.js {
browser() // 追加
nodejs()
}
在项目根目录的 webpack.config.d 目录中,根据以下内容创建 webpack.config.js 文件。
var nodeExternals = require('webpack-node-externals');
config.target = 'node';
config.externals = [nodeExternals()];
在终端上
./gradlew browserWebpack
执行该操作后,将在build/distributions目录下生成已构建的JavaScript文件。默认情况下,生成的文件名为项目名称.js,但如果想要更改为任意名称,可以在build.gradle的webpackTask中添加以下内容。
kotlin.js {
browser {
webpackTask {
outputFileName = "main.js" // 生成したいファイル名
}
}
nodejs()
}
可以使用node命令来执行生成的JavaScript文件。
node main.js
总结
-
- Kotlin/JSでもサーバーサイドはできる
- JSを吐き出したいときにはターゲットをブラウザにしてWebpackでビルドするという直感に反する作業が必要
情報不足的情况下,结果却出乎意料地很顺利。喜欢Kotlin的大家也一定要试一试。
这次的示例代码我已经在我的GitHub上公开了,如果你方便的话,请随意访问。
https://github.com/yt8492/KotlinOnNodeJSSample
在中文中,参考的另一种表达方式是”借鉴”。
以下是对 https://github.com/Kotlin/kotlinx-nodejs 和 https://saku.io/build-for-node-runtime-using-webpack/ 的简述,仅提供一种选项:
https://github.com/Kotlin/kotlinx-nodejs 是一个用 Kotlin 编写的 Node.js 扩展库。
https://saku.io/build-for-node-runtime-using-webpack/ 是有关使用 Webpack 构建 Node.js 运行时的主题。