{"id":1481,"date":"2021-03-09T16:07:47","date_gmt":"2021-03-09T14:07:47","guid":{"rendered":"https:\/\/saladtomatonion.com\/blog\/?p=1481"},"modified":"2021-03-09T16:12:14","modified_gmt":"2021-03-09T14:12:14","slug":"installer-plusieurs-versions-de-node-js-concurrentes-avec-nvm","status":"publish","type":"post","link":"https:\/\/saladtomatonion.com\/blog\/2021\/03\/09\/installer-plusieurs-versions-de-node-js-concurrentes-avec-nvm\/","title":{"rendered":"Installer plusieurs versions de node.js concurrentes avec nvm"},"content":{"rendered":"\n<p>Je me suis retrouv\u00e9 dans la situation o\u00f9 la derni\u00e8re version de <code>node.js<\/code> n&rsquo;\u00e9tait plus adapt\u00e9e \u00e0 un projet que j&rsquo;avais en d\u00e9veloppement. Il fallait que je revienne quelques versions en arri\u00e8re afin que mon code TypeScript soit interpr\u00e9t\u00e9 et compil\u00e9 (vers du ES5 pour fonctionner dans le navigateur). La solution, c&rsquo;est <code>nvm<\/code>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Installer nvm<\/h2>\n\n\n\n<p>&#x26a0;&#xfe0f; <code>nvm<\/code>est fait pour les syst\u00e8mes POSIX, c&rsquo;est-\u00e0-dire les d\u00e9riv\u00e9s d&rsquo;UNIX (dont Linux et MacOS). Il existe toutefois une alternative pour windows.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pour Linux<\/h3>\n\n\n\n<p>Il suffit de t\u00e9l\u00e9charger <a href=\"https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.37.2\/install.sh\">ce fichier<\/a> et de l&rsquo;ex\u00e9cuter dans un terminal.<\/p>\n\n\n\n<p>Ou bien encore, en une ligne:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncurl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.37.2\/install.sh | bash\n<\/pre><\/div>\n\n\n<p>Selon <a href=\"https:\/\/github.com\/nvm-sh\/nvm#troubleshooting-on-linux\">la documentation de <code>nvm<\/code><\/a>, il peut \u00eatre n\u00e9cessaire d&rsquo;ouvrir un nouveau shell pour que la commande <code>$ nvm<\/code> soit disponible.<\/p>\n\n\n\n<p>&#x2139;&#xfe0f; Par d\u00e9faut, le script installera <code>nvm<\/code> dans votre home directory.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pour MacOS<\/h3>\n\n\n\n<p>L&rsquo;installation sous MacOS peut se faire \u00e9videment de la m\u00eame fa\u00e7on que pr\u00e9c\u00e9dement sous Linux, mais j&rsquo;ai trouv\u00e9, pour moi, que l&rsquo;installation avec <code>Homebrew<\/code>\u00e9tait encore plus simple (je l&rsquo;utilise pour d&rsquo;autres choses, donc il \u00e9tait d\u00e9j\u00e0 pr\u00e9sent sur mon syst\u00e8me).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nbrew install nvm\n<\/pre><\/div>\n\n\n<p>&#x1f4a1; Sur les nouvelles machines Apple, \u00e9quip\u00e9es de processeurs ARM (le Apple M1 \u00e0 l&rsquo;heure o\u00f9 j&rsquo;\u00e9cris ces lignes), on peut installer des versions de <code>node.js<\/code> compil\u00e9es pour le processeur, et donc \u00e9viter d&rsquo;utiliser la couche d&rsquo;\u00e9mulation de processeur Intel (<em>Rosetta 2<\/em>), et donc potentiellement avoir un gain notable de performances.<\/p>\n\n\n\n<p>Il suffit de faire attention de bien utiliser la version de <code>homebrew<\/code> \u00ab\u00a0sp\u00e9ciale processeur ARM\u00a0\u00bb qu&rsquo;on trouve ici: <code>\/opt\/homebrew\/bin\/brew<\/code>.<\/p>\n\n\n\n<p>(Mais vous avez peut-\u00eatre d\u00e9j\u00e0 alias\u00e9 <code>brew<\/code>pour l&rsquo;ex\u00e9cutable ARM?)<\/p>\n\n\n\n<p>&#x26a0;&#xfe0f; La plupart du temps, l&rsquo;installation de <code>nvm<\/code>va modifier un de vos fichiers de pre-launch du shell, mais dans certains cas, \u00e7a peut ne pas fonctionner, particuli\u00e8rement si vous avez un fichier <code>~\/.bashrc<\/code> et que vous \u00eates pass\u00e9 \u00e0 <code>zsh<\/code>.<\/p>\n\n\n\n<p>Dans ce cas, il suffit d&rsquo;ajouter ces lignes \u00e0 votre <code>.zprofile<\/code> ou <code>.zshrc<\/code> (je pr\u00e9f\u00e8re <code>.zprofile<\/code> qui est utilis\u00e9 m\u00eame en dehors d&rsquo;un shell interactif):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nexport NVM_DIR=&quot;\/opt\/homebrew\/var\/homebrew\/linked\/nvm\/&quot;\n&#91; -s &quot;$NVM_DIR\/nvm.sh&quot; ] &amp;&amp; \\. &quot;$NVM_DIR\/nvm.sh&quot; # This loads nvm\n<\/pre><\/div>\n\n\n<p class=\"has-background has-very-light-gray-background-color\">&#x2139;&#xfe0f; Le chemin <code>\/opt\/homebrew\/var\/homebrew\/linked\/nvm\/<\/code> est valide pour <code>brew<\/code> ARM. Pour la version x86, le chemin est le suivant: <code>\/usr\/local\/var\/homebrew\/linked<strong>\/<\/strong>nvm<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pour Windows<\/h3>\n\n\n\n<p>\u00c0 moins d&rsquo;utiliser WSL, et donc d&rsquo;\u00eatre dans un contexte POSIX, le mieux est d&rsquo;installer <code>nvm-windows<\/code>comme expliqu\u00e9 ici: <a href=\"https:\/\/github.com\/coreybutler\/nvm-windows\">https:\/\/github.com\/coreybutler\/nvm-windows<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installer une version de node.js<\/h2>\n\n\n\n<p>C&rsquo;est simple comme bonjour!<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nnvm install 10 # Installe la v 10 la plus r\u00e9cente\nnvm install 8.1.4 # Installe exactement cette version\nnvm install node # Installe la toute derni\u00e8re version stable\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Changer de version de node<\/h2>\n\n\n\n<p>Il suffit d&rsquo;utiliser la commande <code>use<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnvm use 10\nnvm use 8.1.4\n<\/pre><\/div>\n\n\n<p>&#x26a0;&#xfe0f;  Avec <code>nvm-windows<\/code>, la version est chang\u00e9e system-wide, alors que sous les syst\u00e8mes POSIX, le changement est local \u00e0 la session de shell.<\/p>\n\n\n\n<p>&#x1f4a1; Pour changer la version par d\u00e9faut pour les syst\u00e8me POSIX, il faut utiliser la commande `alias` comme suit:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnvm alias default 12 # Utilise la derni\u00e8re 12.x\n<\/pre><\/div>\n\n\n<p>\u00c7a vous a \u00e9t\u00e9 utile? Laissez un petit mot en commentaire! <\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Sources<\/h4>\n\n\n\n<ul><li><a href=\"https:\/\/github.com\/nvm-sh\/nvm#node-version-manager---\">https:\/\/github.com\/nvm-sh\/nvm#node-version-manager&#8212;<\/a><\/li><li><a href=\"https:\/\/github.com\/coreybutler\/nvm-windows\">https:\/\/github.com\/coreybutler\/nvm-windows<\/a><\/li><li><a href=\"https:\/\/stackoverflow.com\/questions\/24585261\/nvm-keeps-forgetting-node-in-new-terminal-session\">https:\/\/stackoverflow.com\/questions\/24585261\/nvm-keeps-forgetting-node-in-new-terminal-session<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Je me suis retrouv\u00e9 dans la situation o\u00f9 la derni\u00e8re version de node.js n&rsquo;\u00e9tait plus adapt\u00e9e \u00e0 un projet que j&rsquo;avais en d\u00e9veloppement. Il fallait que je revienne quelques versions en arri\u00e8re afin que&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":1498,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[4],"tags":[348,18,347,349],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/saladtomatonion.com\/blog\/wp-content\/uploads\/2021\/03\/nodejs.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1481"}],"collection":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/comments?post=1481"}],"version-history":[{"count":15,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1481\/revisions"}],"predecessor-version":[{"id":1502,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1481\/revisions\/1502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/media\/1498"}],"wp:attachment":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/media?parent=1481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/categories?post=1481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/tags?post=1481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}