Написание приложений nodejs в котлине с интеллигентной идеей
Я пытаюсь разработать приложение Nodejs, используя Kotlin 1.3.11, используя среду разработки IntelliJ IDEA CE. К сожалению, я не продвинулся к запуску приложения. Чтобы убедиться, что все настроено правильно, я хочу распечатать простой "привет мир".
Я искал статьи или учебные пособия по этой теме, но я не нашел ничего о том, как объединить эти три (Kotlin, IntelliJ, Nodejs). Наиболее конкретные, которые я нашел: средний пост и другой пост.
Насколько мне известно, существует три основных этапа:
- вызов инициализации приложения узла через npm и использование npm для установки зависимостей узла, таких как kotlin и expressjs
- создание build.gradle для определения других зависимостей и задач
- создание проекта IntelliJ IDEA
Я пытался выполнить шаги в разных порядках, но я так и не пришел к запущенному приложению Также я искал в документации IntelliJ, но интеграция Nodejs не является функцией бесплатной версии сообщества. Там нет описания, как заставить Kotlin и Nodejs работать вместе.
Кто-нибудь здесь успешно пытался это сделать (или не смог и знает, почему это не сработает)? Нужно ли мне использовать другую IDE или писать свои собственные инструменты для сборки / набор инструментов?
С уважением, J.
1 ответ
Я не делал этого в IDEA CE, но теоретически это должно работать.
Предварительные условия: у вас установлен узел, вы можете выполнять задачи gradle
Это минимальная конфигурация, есть всеобъемлющая. Добавить комментарий, если интересно
Шаг 1:
Создайте новый проект Kotlin/JS (с Gradle) и убедитесь, что ваш файл сборки Gradle выглядит следующим образом
group 'node-example'
version '1.0-SNAPSHOT'
buildscript {
ext.kotlin_version = '1.3.11'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin2js'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
}
compileKotlin2Js.kotlinOptions {
moduleKind = "commonjs"
outputFile = "node/index.js"
}
task npmInit(type: Exec) {
commandLine "npm", "init", "-y"
}
task npmInstall(type: Exec) {
commandLine "npm", "install", "kotlin", "express", "--save"
}
task npmRun(type: Exec) {
commandLine "node", "node/index.js"
}
npmRun.dependsOn(build)
Шаг 2:
После синхронизации вашего build.gradle
на шаге 1 запустите задачи gradle npmInit
а также npmInstall
./gradlew :npmInit
./graldew :npmInstall
Шаг 3:
Создайте свой файл kotlin (index.kt
/main.kt
/whatever.kt
) в src/main/kotlin
и протестируйте код ниже
external fun require(module:String):dynamic
fun main(args: Array<String>) {
println("Hello JavaScript!")
val express = require("express")
val app = express()
app.get("/", { req, res ->
res.type("text/plain")
res.send("Kotlin/JS is kool")
})
app.listen(3000, {
println("Listening on port 3000")
})
}
Шаг 4:RTFA - Запустите приложение
Запустите задачу Gradle npmRun
./gradlew :npmRun
надеюсь, это поможет
Замечания:
1. Этот шаблон был взят из среднего поста, который вы спрашивали выше, и немного изменился
2. Не забывайте запускать свои задачи Gradle, используя sudo
(если вы используете Linux)
Изменить: в качестве альтернативы вы можете клонировать https://github.com/miquelbeltran/kotlin-node.js и следовать инструкциям в прочитанном мной.
Мне удалось заставить работать Medium post, заменив gradle build
со следующим (поскольку сообщение было опубликовано в 2017 году (!) и требует гораздо более старую версию Gradle):
Закомментируйте все содержимое build.gradle
вот так:
/*group 'node-example'
...
compileKotlin2Js.kotlinOptions {
moduleKind = "commonjs"
outputFile = "node/index.js"
}*/
Выполните эту команду в командной строке: (3.4.1 была последней версией Gradle как раз перед публикацией сообщения Medium.)
gradle wrapper --gradle-version=3.4.1
Раскомментировать build.gradle
:
group 'node-example'
...
compileKotlin2Js.kotlinOptions {
moduleKind = "commonjs"
outputFile = "node/index.js"
}
Запустите эту команду вместо gradle build
:
gradlew build
И, наконец, запустите эту команду, как в сообщении: (На момент написания этого ответа на Stackru версия Node.js не была понижена, и текущая версия LTS 10.16.0 работает отлично.)
node node/index.js