Créer un projet Node.js en TypeScript

2016-10-27 #javascript

Créer (et ouvrir) un nouveau projet

C:\Code> md Test3 && cd Test3 && code .

Ça dépote !

Créer le fichier tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "sourceMap": true
  },
  "exclude": [
    "node_modules",
    "bower_components",
    "jspm_packages",
    "tmp",
    "temp"
  ]
}

Créer le fichier tasks.json

  • Ctrl+Shift+P et "Configure Task Runner"
  • Sélectionner "TypeScript - Watch Mode : Compiles a TypeScript project in watch mode"
  • Ctrl+Shift+B pour démarrer la tâche

Installer le fichier de définition pour Node.js

  • Ctrl+ù pour ouvrir le terminal de Visual Code
c:\Code\Test3> typings install dt~node --global --save

Créer un fichier test.ts

const path = require('path');

var current_dir = path.resolve('./');
console.log(current_dir);

Exécuter le fichier test.js

  • Ctrl+ù pour ouvrir le terminal de Visual Code
c:\Code\Test3> node test.js
c:\Code\Test3

c:\Code\Test3> _

Améliorer l'intellisense pour Node.js

Dans certains tutoriels, on trouve une syntaxe utilisant le mot clé var :

var path = require('path');

Mais dans la documentation de Node.js, c'est bien la syntaxe avec le mot clé const qui est utilisée :

const path = require('path');

Cependant, pour que Visual Code soit capable de reconnaitre l'objet path, il faut utiliser la syntaxe d'import des modules de ES6 :

import * as path from 'path';

Ça ne change absolument rien au JS qui est généré :

"use strict";
const path = require('path');
var current_dir = path.resolve('./');
console.log(current_dir);
//# sourceMappingURL=test.js.map

Et par contre, on dispose maintenant d'une intellisense complète :

Débuguer le code TypeScript

  • Ctrl+Shift+D et sélectionner l'environnement "Node.js"
  • Génère le fichier ".vscode/launch.json"
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "node",
      "request": "launch",
      "program": "${workspaceRoot}/app.js",
      "stopOnEntry": false,
      "args": [],
      "cwd": "${workspaceRoot}",
      "preLaunchTask": null,
      "runtimeExecutable": null,
      "runtimeArgs": [
        "--nolazy"
      ],
      "env": {
        "NODE_ENV": "development"
      },
      "console": "internalConsole",
      "sourceMaps": false,
      "outDir": null
    },
    {
      "name": "Attach",
      "type": "node",
      "request": "attach",
      "port": 5858,
      "address": "localhost",
      "restart": false,
      "sourceMaps": false,
      "outDir": null,
      "localRoot": "${workspaceRoot}",
      "remoteRoot": null
    },
    {
      "name": "Attach to Process",
      "type": "node",
      "request": "attach",
      "processId": "${command.PickProcess}",
      "port": 5858,
      "sourceMaps": false,
      "outDir": null
    }
  ]
}
  • Modifier les 2 lignes suivantes :
      "program": "${workspaceRoot}/test.js",
      "sourceMaps": true,
  • Venir sur la ligne console.log(current_dir); du fichier "test.ts" puis F9 pour mettre un point d'arrêt dessus.

  • F5 pour lancer le débugage

  • F5 pour continuer l'exécution

Une fois le programme terminé, la barre d'outils pour le débugage est toujours présente et il faut faire Shift+F5 pour arrêter l'exécution. Pour éviter cela, on peut ajouter la ligne suivante à la fin du fichier "test.ts" :

process.exit();