Menu

Node.js vs JavaScript : quelle différence ?

JavaScript est le langage ; Node.js est un programme qui l'exécute en dehors du navigateur. La syntaxe est identique, mais les variables globales et les API intégrées autour de votre code sont différentes.

Cette page contient des éditeurs exécutables. Modifiez, exécutez et voyez la sortie instantanément.

JavaScript est un langage de programmation ; Node.js est un runtime, un programme qui exécute du JavaScript en dehors du navigateur. La syntaxe, les types et les objets standard (Array, Promise, JSON) sont les mêmes dans les deux. Ce qui change, c'est l'environnement autour de votre code : un navigateur vous donne window et document pour travailler avec une page web, alors que Node.js vous donne global, process, require et des modules comme fs pour travailler avec les fichiers, les serveurs et le système d'exploitation.

Les globales du navigateur ont affiché undefined, celles de Node.js object ou function, et la dernière ligne true, car dans Node.js globalThis et global sont le même objet. Collez les six premières lignes dans la console d'un navigateur et les résultats s'inversent.

La différence en un tableau

JavaScript dans un navigateurJavaScript dans Node.js
Ce que c'estLe langage, exécuté par le moteur du navigateurLe même langage, exécuté par le runtime Node.js (V8)
Objet globalwindowglobal
Travaille surLa page : document, le DOM, les événementsLa machine : fs, http, process, os
Modules<script type="module">, importrequire (CommonJS) et import (modules ES)
PackagesIntégrés à la page par le bundlerInstallés dans node_modules avec npm
EntréesClics, formulaires, événements clavierArguments de ligne de commande, entrée standard, requêtes HTTP
Array, Promise, JSON, setTimeout, consoleOuiOui

La ligne des modules est celle qui piège le plus de monde. Node.js prend en charge les deux systèmes, require et import, alors que les navigateurs ne comprennent que import. La page CommonJS ou modules ES explique lequel choisir.

Le langage est le même

Une fonction qui n'utilise que le langage tourne partout. Ce bloc ne contient rien de propre à Node, et il afficherait les mêmes lignes dans un navigateur :

Le programme a affiché {"best":95,"average":85} et Passed: 2 of 3. La syntaxe de décomposition, reduce, les template strings et JSON font partie du langage, défini par le standard ECMAScript, donc tous les runtimes les ont.

Ce que seul Node.js possède

La partie propre à Node, ce sont les modules intégrés et les globales qui parlent au système d'exploitation :

Il a écrit un fichier, l'a relu et a affiché .txt 2 lines, puis une liste vide d'arguments. Ni l'accès aux fichiers ni process.argv n'existent dans un navigateur, où une page ne peut pas toucher à votre disque.

Quelles fonctionnalités du langage vous avez

Le langage a des versions (ES2015, ES2020, ES2024, etc.), et chaque moteur ajoute les nouveautés à son rythme. Node.js embarque un moteur V8 précis par version, donc c'est votre version de Node.js qui décide quelles fonctionnalités marchent : Object.groupBy et Array.prototype.findLast, par exemple, demandent une version récente. Un tableau de compatibilité des navigateurs liste donc Node.js comme une colonne de plus à côté de Chrome, Firefox et Safari. Lancez node --version quand une syntaxe récente échoue avec une SyntaxError ou qu'une méthode vaut undefined, et mettez à jour avant de chercher un polyfill.

Écrire du code qui tourne dans les deux

Les auteurs de bibliothèques vérifient parfois où tourne leur code avant d'utiliser une API propre à un environnement :

const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';

Quand c'est possible, testez la fonctionnalité dont vous avez besoin plutôt que le nom de l'environnement : typeof fetch === 'function' en dit plus que « est-ce que c'est Node ». Les deux ont aujourd'hui fetch, URL, TextEncoder, setTimeout et structuredClone, donc moins de code a besoin d'une vérification qu'il y a quelques années.

Erreurs fréquentes

Utiliser document ou window dans un script Node.js. Vous obtenez ReferenceError: document is not defined. Ce code a sa place dans un navigateur.

Utiliser require dans un navigateur. Les navigateurs ne l'ont pas. Utilisez import, ou un bundler qui transforme les appels require en un seul fichier.

Penser que Node.js est un autre langage. Ce n'est pas le cas. Si un tutoriel JavaScript l'enseigne, ça marche en Node.js, sauf s'il utilise le DOM.

Questions fréquentes

Peut-on apprendre Node.js sans apprendre JavaScript ?

Pas vraiment. Chaque ligne écrite en Node.js est du JavaScript, donc le langage vient en premier. Une fois que vous connaissez les fonctions, les objets et les promesses, Node.js est un ensemble d'API en plus à apprendre.

Pourquoi j'obtiens « document is not defined » en Node.js ?

document est le DOM du navigateur, et Node.js n'a aucune page pour vous en fournir un. Le code qui touche document ou window doit tourner dans un navigateur, ou dans un environnement de test qui simule le DOM, comme jsdom.

TypeScript, c'est la même chose que Node.js ?

Non. TypeScript est une version typée de JavaScript qui se compile en JavaScript. Vous pouvez exécuter le résultat dans Node.js ou dans un navigateur, et les versions récentes de Node.js peuvent aussi exécuter directement beaucoup de fichiers .ts en retirant les types.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

Commencer