Utiliser Typescript avec Node.js

Pour utiliser Typescript côté serveur, on peut choisir Deno, le moteur d’exécution Typescript conçu par le créateur de Node.js. Problème, il n’est pas encore stable. La seconde solution consiste à transpiler notre Typescript avant de l’exécuter avec Node.js. Il existe déjà des tutoriels sur le sujet, mais peu d’entres eux parlent de Backpack. C’est un module bundler pour Node.js basé sur Webpack.

Backpack

On commence par installer Backpack

yarn add -DE backpack-core

Ensuite on va installer Koa qui sera notre serveur

yarn add -E koa

On créé ensuite le serveur dans un fichier se situant dans src/index.js. C’est le point d’entrée par défaut de Backpack

// src/index.js
const Koa = require("koa")

const app = new Koa()

app.use((ctx) => {
  ctx.body = "Jon Snow meurt saison 5 épisode 10"
})

app.listen(3000)
console.log("listening on port 3000")

Enfin on ajoute les scripts dans notre package.json

{
  "scripts": {
    "dev": "backpack",
    "build": "backpack build"
  }
}

On lance un yarn dev et…

console-succes

…Backpack bundle nos sources Javascript sans problème

Ajout de Typescript

On commence par ajouter Typescript, ainsi que les types pour Node et Koa

yarn add -DE typescript @types/node @types/koa

Puis on initialise une configuration Typescript avec

yarn tsc --init

Il faut renommer le fichier src/index.js en src/index.ts puis mettre à jour le code.

// src/index.ts
import Koa, { Context } from "koa"

const app: Koa = new Koa()

app.use((ctx: Context) => {
  ctx.body = "Jon Snow meurt saison 5 épisode 10"
})

app.listen(3000)
console.log("listening on port 3000")

Desormais si je lance de nouveau un yarn dev j’obtiens…

console-error …une belle erreur.

L’erreur est explicite, Backpack ne parvient pas à trouver un fichier dans src/index.js. Nous allons donc surcharger la configuration par défaut de Backpack afin de lui indiquer que désormais le point d’entrée est le fichier src/index.ts et par la même occasion nous allons lui donner la possibilité de comprendre les fichiers Typescript.

Backpack étant basé sur Webpack, on va pouvoir utiliser les loaders existants. Ajoutons le loader Typescript.

yarn add -DE ts-loader

Il ne nous reste plus qu’a créer un fichier de configuration nommé backpack.config.js et à y ajouter le nouveau point d’entrée et le loader Typescript.

// backpack.config.js
module.exports = {
  webpack: (config, options, webpack) => {
    // nouveau point d'entrée
    config.entry.main = ["./src/index.ts"]

    // résolution automatique des extensions
    config.resolve = {
      extensions: [".ts", ".js", ".json"],
    }

    // loader Typescript
    config.module.rules.push({
      test: /\.ts$/,
      loader: "ts-loader",
    })

    return config
  },
}

On lance un yarn dev et tout fonctionne !

console-succes

Et voila c’est fini. Simple non ?

Merci de m’avoir lu.

Maxime Blanc


© 2020 Maxime Blanc. Tous droits réservés.