# Installer Node.js Ce guide montre comment mettre `node` et `npm` sur une machine, installer le serveur de langage à côté d'eux, et vérifier que Turbo JS le trouve. Il suppose que vous avez déjà Turbo JS, ou êtes sur le point de l'avoir — voir [installer l'éditeur](install.md) pour cela. **L'éditeur marche sans rien de tout cela.** L'édition, la coloration, les thèmes, les snippets et les fenêtres de terminal tournent tous sans aucun Node. Ce qui en a besoin : chaque commande du menu JavaScript, et — par le serveur de langage — la complétion, le menu Code et les marques d'erreur dans la gouttière. ## Quelles pièces il vous faut | Pièce | À quoi elle sert | D'où elle vient | | --- | --- | --- | | `node` | Le runtime : exécute les scripts, et est aussi le lanceur de tests (`node --test`) et un vérificateur de syntaxe (`node --check`) | l'installeur de Node.js ou un gestionnaire de versions | | `npm` | Le gestionnaire de paquets : installe les dépendances d'un projet et, avec `-g`, des outils tels que le serveur de langage | livré avec Node | | `npx` | Lance un outil depuis les dépendances du projet, ou le télécharge d'abord dans un cache — c'est ainsi que le fichier de départ lance Prettier et ESLint | livré avec npm | | `typescript-language-server` + `typescript@6` | Le serveur de langage, et le moteur qu'il enveloppe | `npm install -g` | Turbo JS a été écrit contre Node **24** et npm **11** ; toute release courante convient. ## Installer Node Choisissez-en une. Un gestionnaire de versions est le choix habituel sur une machine où vivent plusieurs projets, parce que les projets épinglent des versions de Node différentes. **Avec nvm** (macOS et Linux) : ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash exec $SHELL nvm install --lts ``` **Avec Volta :** ```bash curl https://get.volta.sh | bash exec $SHELL volta install node ``` **Avec Homebrew** (macOS) : ```bash brew install node ``` **Avec l'installeur** de [nodejs.org](https://nodejs.org), qui met `node` et `npm` dans `/usr/local/bin` sur macOS et Linux. Vérifiez : ```bash node --version npm --version ``` ``` v24.19.0 11.17.0 ``` ## Installer le serveur de langage ```bash npm install -g typescript-language-server typescript@6 ``` Deux paquets. Le `@6` n'est pas facultatif : TypeScript 7 est le portage natif et ne livre aucun `tsserver.js`, et le serveur refuse de démarrer à côté de lui. [Activer la complétion](enable-completion.md) en dit plus. L'installeur de Turbo JS fera cela si on le lui demande : ```bash scripts/install.sh --with-server ``` Il lance le même `npm install -g` quand aucun serveur fonctionnel n'est trouvé, et a besoin de `npm` sur le `PATH`. ## Vérifier ```bash typescript-language-server --version ``` ``` 6.0.0 ``` Et qu'il démarre vraiment — un serveur dont le TypeScript est de la mauvaise version n'échoue qu'à ce moment-là, pas à `--version` : ```bash echo | typescript-language-server --stdio ``` Il lit une ligne vide, n'y trouve aucun message, et se termine proprement. Un serveur qui imprime *Could not find a valid TypeScript installation* a TypeScript 7 à côté de lui : `npm install -g typescript@6`. ## Vérifier que l'éditeur le trouve Ouvrez n'importe quel fichier `.js` dans un projet et lisez l'extrémité droite de la barre d'état : ``` F1 Describe F2 Save F3 Open F6 Window F10 Menu 1:1 LSP: ready ``` `LSP: ready` signifie que le serveur a démarré. `LSP: no typescript-language-server — npm install -g typescript-language-server typescript@6` signifie qu'il n'a pas été trouvé, et le message dit comment l'obtenir. **Turbo JS regarde à ces endroits, dans l'ordre** : votre `PATH` ; `$NVM_BIN`, le répertoire de la version de Node que nvm a sélectionnée ; `$NPM_CONFIG_PREFIX/bin`, ou `~/.npm-global/bin` quand cette variable n'est pas définie ; `$PNPM_HOME` ; `$VOLTA_HOME/bin`, ou `~/.volta/bin` ; puis `/usr/local/bin` et `/opt/homebrew/bin`. Les répertoires des gestionnaires de versions sont fouillés même quand ils ne sont pas sur le `PATH` — un éditeur lancé par un lanceur de bureau, par exemple — pour que le cas qui ressemble sinon à un serveur cassé fonctionne. ## Variantes - **`npm install -g` demande sudo.** Le Node de l'installeur système possède `/usr/local/lib`. Soit utilisez `sudo`, soit donnez à npm un préfixe à vous : `npm config set prefix ~/.npm-global` et ajoutez `~/.npm-global/bin` au `PATH` — l'éditeur fouille ce répertoire par son nom. - **Vous utilisez pnpm.** `pnpm add -g typescript-language-server typescript@6` met le serveur dans `$PNPM_HOME`, que l'éditeur fouille. - **Vous avez déjà `typescript-language-server` mais pas de complétion.** Lancez `echo | typescript-language-server --stdio` et lisez ce qu'il dit. Puis lisez la barre d'état — `Run ▸ Language server status` montre le chemin que l'éditeur a trouvé et si le serveur a répondu à sa poignée de main. - **Vous voulez mettre à jour.** `npm update -g typescript-language-server`. Gardez `typescript` en 6 tant que le serveur ne peut pas démarrer avec 7. Redémarrez l'éditeur : il démarre un serveur par session et ne remarque pas un nouveau binaire avant. - **Vous installez pour la CI, ou dans une image.** `node:24-alpine` et les autres images officielles contiennent `node`, `npm` et `npx` ; `npm install -g typescript-language-server typescript@6` dans une ligne `RUN` ajoute le serveur. L'éditeur ne peut pas utiliser un serveur dans un conteneur, c'est donc pour lancer les commandes du projet, pas pour la complétion. - **Vous voulez être sûr que l'éditeur ne le trouve pas simplement sur le `PATH`.** Lancez-le avec un environnement réduit — `env PATH=/usr/bin:/bin turbo-js main.js` — et la barre d'état doit toujours dire `LSP: ready`, depuis l'un des répertoires ci-dessus. ## À quoi sert chaque pièce, vue de l'éditeur | Pièce | Ce que l'éditeur en fait | | --- | --- | | `typescript-language-server` | La complétion, le survol, les définitions, les références, les implémentations, les symboles du fichier et du projet, et les marques d'erreur | | `node` | Les entrées **Run** et **Test** du menu JavaScript | | `npm` | Les entrées **Install** et **Start** | | `npx` | Les entrées **Format** et **Lint** | ## Voir aussi - [Activer la complétion](enable-completion.md) — que faire quand le serveur est installé et ne dit toujours rien - [Lancer des commandes Node depuis l'éditeur](run-node-commands.md) — le menu JavaScript - [Coloration et complétion](../explanation/colouring-and-completion.md) — pourquoi le serveur est celui de TypeScript