Aujourd’hui, on va faire très bref, le confinement génère son lot de soucis.

Dans le précédent épisode, nous avions mis en place une application web avec un frontend React et un backend Vert.x en Kotlin.

Pour développer, il suffit de lancer le backend qui est une application JVM, de lancer le frontend qui sera alors une application Node, et tout fonctionne.

Pour une version déployée, appelons ça pompeusement notre production, il serait bon de simplifier cela en pilotant tout depuis l'application tournant dans la JVM.

Pour se faire, il faut apporter 2 modifications.

La première sera d'indiquer à notre MainVerticle qu'il aura des ressources statiques à servir.

router.get().handler(StaticHandler.create())

Par défaut, le code que vous voyez servira les ressources statiques trouvées dans le répertoire webroot.

Reste à construire le frontend et copier ses fichiers dans ce répertoire webroot.
Modifions notre fichier de build en ajoutant quelques lignes.

node {
  version = "10.16.0"
  npmVersion = "6.9.0"
  download = true
  nodeModulesDir = File("frontend")
}

val buildFrontend by tasks.creating(NpmTask::class) {
  setArgs(listOf("run", "build"))
  dependsOn("npmInstall")
}

val copyFrontendFiles by tasks.creating(Copy::class) {
  from("frontend/build")
  destinationDir = File("${buildDir}/classes/kotlin/main/webroot")
  dependsOn(buildFrontend)
}

val processResources by tasks.getting(ProcessResources::class) {
  dependsOn(copyFrontendFiles)
}

Dorénavant, lorsque vous lancerez votre commande gradle run, vous aurez accès à l'application par http://localhost:8888/

La différence étant bien entendu qu'en phase de développement, le serveur node, qui répond dans notre cas sur le port 3000, vous permettra de travailler sans relancer toute la build à chaque modification.

Voilà, c'est court aujourd'hui.
Vous trouverez comme d'habitude le code dans le repository, dans la branche vertx3.

Je tenais à remercier au passage Thomas Segismont qui est l'auteur de l'un des articles que j'ai lu dans mon parcours de débutant.

Comme d'habitude pour toute question, pour toute remarque, pour toute critique, vous pouvez me joindre par email ou sur Twitter.