Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
nodejs [Le 27/10/2013, 13:11] quent57 [Depuis les dépôts officiels] |
nodejs [Le 25/05/2025, 13:35] (Version actuelle) nekdev [Depuis un PPA (dépôts "nodesource")] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
{{tag>programmation serveur }} | {{tag>programmation serveur }} | ||
- | ---- | ||
- | ====== Nodejs ====== | ||
- | **Nodejs** est un logiciel permettant d'exécuter du [[wpfr>JavaScript]] côté serveur, contrairement à ce qu'on a l'habitude de voir avec le javascript côté client. | ||
- | L'avantage d'utiliser **Nodejs** est que javascript permet l'éxécution de tâches asynchrones, ce qui peut être pratique dans certaines situations. C'est de plus en plus souvent le cas avec le « nouveau » web qui arrive (html5/css3, etc.).\\ | + | ====== Node.js ====== |
- | De plus, **Nodejs** permet de créer des applications « serveur » facilement grâce à des applications tierces qu'il prend en charge via un logiciel similaire à un [[:gestionnaire de paquets]]. | + | |
+ | **Node.js** est un logiciel permettant d'exécuter du [[wpfr>JavaScript]] côté serveur, contrairement à ce qu'on a l'habitude de voir avec le JavaScript côté client. | ||
+ | |||
+ | L'avantage d'utiliser **Node.js** est que JavaScript permet l'exécution de tâches asynchrones, ce qui peut être pratique dans certaines situations. C'est de plus en plus souvent le cas avec le « nouveau » web qui arrive (html5/css3, etc.).\\ | ||
+ | De plus, **Node.js** permet de créer des applications « serveur » facilement grâce à des applications tierces qu'il prend en charge via **[[https://www.npmjs.com|npm]]**, son [[:gestionnaire de paquets|gestionnaire de dépendances]]. | ||
+ | |||
+ | <note important> | ||
+ | L'écosystème JavaScript est un milieu en constante et rapide évolution. Attention à l'actualité des informations que vous trouvez à ce sujet. À la rédaction de ce message, **[[https://pkg.com/|Yarn]]** se propose de remplacer **npm**, et **[[https://bun.sh|Bun]]** propose de remplacer à la fois **Node.js**, **npm** et **Yarn**. | ||
+ | </note> | ||
===== Pré-requis ===== | ===== Pré-requis ===== | ||
Ligne 13: | Ligne 18: | ||
| | ||
===== Installation ===== | ===== Installation ===== | ||
+ | |||
+ | Il existe de nombreuses manières d'installer **Node.js**. Ubuntu le propose dans ses dépôts officiels et recommande évidemment cette méthode. Mais certaines applications JavaScript requièrent des versions spécifiques de Node.js et/ou de npm, et [[:APT]] (qu'il s'agisse de [[:PPA]] ou des [[:dépôts]] officiels d'Ubuntu) ne convient pas à l'utilisation de diverses versions spécifiques. | ||
+ | |||
+ | Il existe donc plusieurs autres méthodes d'installation, et en particulier des gestionnaires de versions qui permettent l'installation voire même l'usage de plusieurs versions de **Node.js** simultanément : | ||
+ | * [[#au_moyen_du_gestionnaire_de_versions_nvm|nvm]] (//Node Version Manager//) | ||
+ | * [[#au_moyen_du_gestionnaire_de_versions_n|n]] | ||
+ | * [[https://docs.brew.sh/Homebrew-on-Linux|Homebrew]] | ||
+ | |||
+ | Il est aussi possible de profiter de l'environnement [[:Docker]] pour installer les versions de **Node.js**, **npm** ou **Yarn** de son choix, en les isolant du système. Dans ce cadre on préfère généralement déployer plus directement et simplement les images des applications qui reposent sur **Node.js** elles-mêmes. | ||
==== Depuis les dépôts officiels ==== | ==== Depuis les dépôts officiels ==== | ||
- | Installer **Nodejs** sous ubuntu est simple, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt>nodejs,npm|nodejs npm]]**. | + | |
+ | <note important> | ||
+ | Cette méthode n'est recommandée que si vous utilisez **Node.js** pour une application en particulier, compatible avec une version de **Node.js** parfois ancienne. Les versions d'Ubuntu étant maintenues plus longtemps que certaines versions de **Node.js**, il arrive régulièrement que la version proposée dans les dépôts officielles soit déjà abandonnée. | ||
+ | |||
+ | Si vous avez couramment besoin de **Node.js** ou souhaitez utiliser une version récente, utilisez de préférence un gestionnaire de version, tel que **[[#au_moyen_du_gestionnaire_de_versions_n|n]]** ou **[[#au_moyen_du_gestionnaire_de_versions_nvm|nvm]]**. | ||
+ | </note> | ||
+ | |||
+ | Installer **Node.js** sous ubuntu est simple, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt>nodejs,npm|nodejs npm]]**. En revanche la version installée de cette manière peut être ancienne et même déjà abandonnée (voir ci-dessus). | ||
=== Résumé en ligne de commande=== | === Résumé en ligne de commande=== | ||
- | Le résumé, à saisir dans un [[:terminal]], utilise ici la [[:commande_shell|commande]] **[[:apt-get]]** : | + | |
+ | Le résumé, à saisir dans un [[:terminal]], utilise ici la [[:commande_shell|commande]] **[[:apt-cli|apt]]** : | ||
<code> | <code> | ||
- | sudo apt-get install python-software-properties | + | sudo apt update |
- | sudo apt-get update | + | sudo apt install nodejs npm |
- | sudo apt-get install nodejs | + | |
</code> | </code> | ||
- | Le packet nodejs contient une dépendance qui inclut npm (attention, ce n'est plus le cas sous Ubuntu 13.10). | + | Si vous souhaitez [[:compilation|compiler]] des projets avec **Node.js** il vous faudra [[:tutoriel:comment_installer_un_paquet|installer]] **[[apt>nodejs-dev]]**. Notez que vous n'avez pas besoin de ce paquet pour développer des projets en [[wpfr>JavaScript]], il est utile en revanche si vous comptez développer des modules pour **Node.js**, eux-mêmes écrits dans un autre langage (par exemple en C/C++). |
- | Si vous souhaitez [[:compilation|compiler]] des projets avec **Nodejs** il vous faudra [[:tutoriel:comment_installer_un_paquet|installer]] **[[apt>nodejs-dev]]**. Notez que vous n'avez pas besoin de ce paquet pour développer des projets en Javascript, il est utile en revanche si vous comptez développer des modules pour Nodejs, eux-mêmes écrits dans un autre langage (par exemple en C/C++). | + | ==== Depuis un PPA (dépôts "nodesource") ==== |
- | ==== Depuis un PPA ==== | + | <note important>Cette méthode n'offre pas la souplesse ni la facilité d'utilisation d'un gestionnaire de version dédié, tel que **[[#au_moyen_du_gestionnaire_de_versions_n|n]]** ou **[[#au_moyen_du_gestionnaire_de_versions_nvm|nvm]]**. En outre elle peut complexifier et rendre imprévisibles les mises à jour majeures du système. |
+ | </note> | ||
- | Chris Lea maintient un PPA avec des versions stables plus récentes de Nodejs | + | [[https://chrislea.com/2014/07/09/joining-forces-nodesource/|Chris Lea]] et [[https://nodesource.com/blog/chris-lea-joins-forces-with-nodesource|NodeSource]] se sont associés pour maintenir un [[:PPA]] avec des versions stables de **Node.js**, souvent plus récentes que celles des dépôts officiels. |
- | * [[:PPA|Ajoutez le PPA]] **ppa:chris-lea/node.js**((https://launchpad.net/~chris-lea/+archive/node.js/)) dans vos sources de logiciels ; | + | Chaque version de **Node.js** possède un script d'installation qui ajoute le dépôt correspondant au gestionnaire de paquet. |
- | <code>sudo add-apt-repository ppa:chris-lea/node.js</code> | + | On les trouve ici : https://github.com/nodesource/distributions |
- | * [[:tutoriel:comment_modifier_sources_maj#recharger_la_liste_des_paquets|Rechargez la liste des paquets]] ; | + | |
- | <code>sudo apt-get update</code> | + | |
- | * [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt://nodejs|nodejs]]**. | + | |
- | <code>sudo apt-get install nodejs</code> | + | |
- | Notez que vous pouvez simplement mettre à jour vos paquets si vous les aviez précédemment installés depuis les dépôts officiels. | + | === Pour installer Node.js 22.x (LTS : active jusqu'en oct. 2025, support jusqu'à fin avril 2027) : === |
+ | |||
+ | C'est la dernière version stable recommandée pour vos applications en production. | ||
+ | |||
+ | <code> | ||
+ | curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && \ | ||
+ | sudo apt-get install -y nodejs | ||
+ | </code> | ||
+ | |||
+ | === Pour installer Node.js 24.x : === | ||
+ | |||
+ | <code> | ||
+ | curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - && sudo apt-get install -y nodejs | ||
+ | </code> | ||
+ | |||
+ | <note tip>Pour installer des paquets supplémentaires avec npm, vous aurez peut-être besoin d'installer **[[apt>build-essential]]**</note> | ||
+ | |||
+ | ==== Au moyen du gestionnaire de versions nvm ==== | ||
+ | |||
+ | **[[https://github.com/nvm-sh/nvm|nvm]]** (//Node Version Manager//), permet de gérer et utiliser très facilement différentes versions de //npm// et //node//.\\ | ||
+ | **nvm** rend disponible les paquets installés globalement sous une version spécifique de **Node.js**/**npm** exclusivement sous cette version, séparés des autres versions de **Node.js**/**npm**. On est sûr d'avoir chaque outil compatible avec sa version de **Node.js**, mais il faut réinstaller les outils dont on a besoin pour chaque nouvelle version.\\ | ||
+ | À ce titre le gestionnaire **[[#au_moyen_du_gestionnaire_de_versions_n|n]]** est plus souple et moins contraignant, mais éventuellement aussi moins fiable (tout est disponible partout). | ||
+ | |||
+ | Si besoin, installer tout d'abord //curl// : | ||
+ | <code>sudo apt install curl </code> | ||
+ | puis **nvm**: | ||
+ | <code>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash</code> | ||
+ | <note important> | ||
+ | Ce numéro de version est amené à changer, vérifier la commande exacte sur [[https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script|le dépôt nvm]] ou [[https://nodejs.org/fr/download|la page download de la doc officielle de node]]. | ||
+ | </note> | ||
+ | Pour pouvoir utiliser immédiatement la commande ''nvm'' : | ||
+ | <code> | ||
+ | source ~/.bashrc | ||
+ | </code> | ||
+ | |||
+ | **nvm** est installé ! | ||
+ | |||
+ | Pour lister les versions disponibles : | ||
+ | <code> | ||
+ | nvm ls | ||
+ | </code> | ||
+ | |||
+ | Pour utiliser la version ''v16.20.2'' en particulier de Node.js : | ||
+ | <code> | ||
+ | nvm use 16 | ||
+ | </code> | ||
+ | |||
+ | ==== Au moyen du gestionnaire de versions n ==== | ||
+ | |||
+ | **[[https://github.com/tj/n|n]]**, une fois installé, permet l'installation simplifié des différentes versions de //node//. | ||
+ | Si besoin, installer tout d'abord //curl// : | ||
+ | <code>sudo apt install curl </code> | ||
+ | puis **n**: | ||
+ | <code>sudo curl -o /usr/local/bin/n https://raw.githubusercontent.com/visionmedia/n/master/bin/n</code> | ||
+ | Puis affecter les droits à n: | ||
+ | <code>sudo chmod +x /usr/local/bin/n</code> | ||
+ | et enfin, installer //node// | ||
+ | <code> | ||
+ | sudo n stable | ||
+ | </code> | ||
===== Utilisation basique ===== | ===== Utilisation basique ===== | ||
- | Voici un exemple d'application javascript que pourrait exécuter **Nodejs**: | + | |
+ | Voici un exemple d'application JavaScript que pourrait exécuter **Node.js**: | ||
<file javascript app.js> | <file javascript app.js> | ||
setTimeout(function() { | setTimeout(function() { | ||
Ligne 59: | Ligne 137: | ||
<file javascript app.js> | <file javascript app.js> | ||
var http = require('http'); | var http = require('http'); | ||
+ | var port = 8080; | ||
http.createServer(function (req, res) { | http.createServer(function (req, res) { | ||
res.writeHead(200, {'Content-Type': 'text/html'}); | res.writeHead(200, {'Content-Type': 'text/html'}); | ||
res.write('Salut tout le monde !'); | res.write('Salut tout le monde !'); | ||
res.end(); | res.end(); | ||
- | }).listen(8080); | + | }).listen(port); |
- | console.log('Serveur tourne sur http://localhost:8080/'); | + | console.log("Serveur tourne sur http://localhost:"+port); |
</file> | </file> | ||
- | Pour comprendre ce code vous devriez jeter un coup d'oeil à la [[http://nodejs.org/docs/latest/api/index.html|documentation officielle]]. | + | Pour comprendre ce code vous devriez jeter un coup d'oeil à la [[https://nodejs.org/docs/latest/api/index.html|documentation officielle]]. |
- | Bien entendu **Nodejs** n'a pas uniquement vocation à créer des petits serveurs comme celui-ci. Mais pour aller plus loin il va falloir utiliser des [[# Ajout de modules|modules]]. | + | Bien entendu **Node.js** n'a pas uniquement vocation à créer des petits serveurs comme celui-ci. Mais pour aller plus loin il va falloir utiliser des [[# Ajout de modules|modules]]. |
===== Ajout de modules ===== | ===== Ajout de modules ===== | ||
- | Ajouter un module à **Nodejs** est extrêmement simple. Depuis un [[:terminal]] tapez la ligne suivante : | + | |
+ | Ajouter un module à **Node.js** est extrêmement simple. Depuis un [[:terminal]] tapez la ligne suivante : | ||
<code>npm install express</code> | <code>npm install express</code> | ||
//Express.js// est un module qui vous évitera de réécrire le code pour un [[wpfr>Serveur_HTTP|serveur http]] à chaque application.\\ N'hésitez pas à aller voir sa documentation. | //Express.js// est un module qui vous évitera de réécrire le code pour un [[wpfr>Serveur_HTTP|serveur http]] à chaque application.\\ N'hésitez pas à aller voir sa documentation. | ||
Ligne 82: | Ligne 162: | ||
===== Voir aussi ===== | ===== Voir aussi ===== | ||
- | * [[https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager|Installer nodejs sous linux]] (en) | + | |
- | * [[http://nodejs.org/docs/latest/api/index.html|Documentation de nodejs]] (en) | + | * [[https://nodejs.org|site officiel nodejs.org]] (en) |
+ | * [[https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager|Installer Node.js sous linux]] (en) | ||
+ | * [[https://nodejs.org/docs/latest/api/index.html|Documentation de Node.js]] (en) | ||
+ | * [[https://github.com/nodejs/LTS#lts-schedule|la feuille de route (roadmap) des versions stables]] (en) | ||
+ | * [[https://www.hostinger.fr/tutoriels/comment-installer-node-js-sur-ubuntu|Tuto installation de NPM et nodjs par nvm]] (fr) | ||
---- | ---- | ||
- | //Contributeur principal : [[utilisateurs:nekdev]].// | + | |
+ | //Contributeurs : [[:utilisateurs:nekdev]], [[:utilisateurs:krodelabestiole]].// |