Comment fonctionne NPM<span class="wtr-time-wrap after-title"><span class="wtr-time-number">9</span> min read</span>

Comment fonctionne NPM9 min read

NodeJS est un langage de programmation dérivé de Javascript. Il permets d’écrire du code du côté du serveur et de ordinateur. Il fonctionne avec l’engine v8 de google qui est présent dans le navigateur google chrome.

Le langage est développé en C++ il est donc optimisé et très rapide. Initialement, le langage devait uniquement permettre de créer des serveurs webs. Les choses ont changées avec le temps. Aujourd’hui, on peux développer des logiciels avec NodeJS (discord ou Atom par exemple), faire des serveurs, et même développer des site frontend en compilant du code.

Pour se faciliter la vie, les développeurs ont crées des outils comme Webpack, Babel, Grunt, React, Redux et bien d’autres.

Au final, le monde du développement frontend as changé grâce à NodeJS. Les modules backend compilent du code frontend pour le rendre servable sur le navigateur.

Par exemple, vous développez un site web React. Un outil comme webpack va compiler votre code pour le rendre utilisable sur un site web. NodeJS est donc devenu un outil global.

Pour gérer tout ces nouveaux outils (appelés packages ou modules en anglais), on utilise NPM (node package manager) un outil permettant de les installer et de les gérer facilement. Npm vous permets d’installer les packages, de les configurer et de les gérer en quelques lignes de codes.

Dans cet article, je vais vous présenter les bases de cet outil. Vous allez voir comment installer les modules en local ou en global, comment les supprimer, les mettre à jour et gérer les versions.

Vous verrez aussi comment package.json fonctionne et à quoi il sert précisément.

Comment utiliser Npm

Je ne vais pas vous faire une leçon complète sur l’installation de NodeJS, je vous invite simplement à aller voir sur internet, c’est très facile et normalement, NPM sera installé en même temps.

Si ce n’est pas le cas, une simple ligne de commande sur Linux ou MacOs fera l’affaire.

npm permets d’installer des modules de deux façons. En local (par défaut) et en global. Les installations locales vont stocker les packages dans le dossier node_modules. A partir d’ici, vous pouvez utiliser les modules dans votre projet.

Les installations globales vous permettent d’utiliser les packages sur votre ordinateur / serveur entièrement. On utilise ces installations pour utiliser des packages qui nous servent tout le temps.

Comment installer un module NPM en global

Lorsque vous installez un module npm en global, il est accessible partout. De ce fait, vous devez utiliser sudo ou lancer votre terminal/cmd en administrateur.

Pour cet exemple, je vais installer nodemon, un package permettant de relancer automatiquement un programme après une modification (très utile pour le développement backend)

Ouvrez votre terminal et tapez simplement cette commande :

sudo npm install nodemon --global

Pensez à retirer le sudo si vous êtes sous windows.

Ici, on utilise le flag –global pour préciser la façon dont on installe le package.

Comme vous le voyez c’est vraiment simple. A partir de maintenant, si vous lancez un script avec nodemon devant, le programme se relancera à chaque modification.

Par exemple :

nodemon index.js

Comment lister les packages globaux installés

Pour afficher les packages globaux installés sur votre machine, vous pouvez lancer cette commande :

npm list --global

Dans mon cas, j’obtiens ce résultat :

/usr/local/lib
└─┬ nodemon@2.0.2
  ├─┬ chokidar@3.3.1
  │ ├─┬ anymatch@3.1.1
  │ │ └── picomatch@2.2.1
  │ ├─┬ braces@3.0.2
  │ │ └─┬ fill-range@7.0.1
  │ │   └─┬ to-regex-range@5.0.1
  │ │     └── is-number@7.0.0
  │ ├── UNMET OPTIONAL DEPENDENCY fsevents@~2.1.2
  │ ├── glob-parent@5.1.0
  │ ├─┬ is-binary-path@2.1.0
  │ │ └── binary-extensions@2.0.0
  │ ├─┬ is-glob@4.0.1
  │ │ └── is-extglob@2.1.1
  │ ├── normalize-path@3.0.0
  │ └── readdirp@3.3.0
  ├─┬ debug@3.2.6
  │ └── ms@2.1.2
  ├── ignore-by-default@1.0.1
  ├─┬ minimatch@3.0.4
  │ └─┬ brace-expansion@1.1.11
  │   ├── balanced-match@1.0.0
  │   └── concat-map@0.0.1
  ├── pstree.remy@1.1.7
  ├── semver@5.7.1
  ├─┬ supports-color@5.5.0
  │ └── has-flag@3.0.0
  ├─┬ touch@3.1.0
  │ └─┬ nopt@1.0.10
  │   └── abbrev@1.1.1
  ├─┬ undefsafe@2.0.2
  │ └─┬ debug@2.6.9
  │   └── ms@2.0.0
  └─┬ update-notifier@2.5.0
    ├─┬ boxen@1.3.0
    │ ├── ansi-align@2.0.0
    │ ├── camelcase@4.1.0
    │ ├── cli-boxes@1.0.0
    │ ├─┬ string-width@2.1.1
    │ │ ├── is-fullwidth-code-point@2.0.0
    │ │ └─┬ strip-ansi@4.0.0
    │ │   └── ansi-regex@3.0.0
    │ ├─┬ term-size@1.2.0
    │ │ └─┬ execa@0.7.0
    │ │   ├─┬ cross-spawn@5.1.0
    │ │   │ ├─┬ lru-cache@4.1.5
    │ │   │ │ ├── pseudomap@1.0.2
    │ │   │ │ └── yallist@2.1.2
    │ │   │ ├─┬ shebang-command@1.2.0
    │ │   │ │ └── shebang-regex@1.0.0
    │ │   │ └─┬ which@1.3.1
    │ │   │   └── isexe@2.0.0
    │ │   ├── get-stream@3.0.0
    │ │   ├── is-stream@1.1.0
    │ │   ├─┬ npm-run-path@2.0.2
    │ │   │ └── path-key@2.0.1
    │ │   ├── p-finally@1.0.0
    │ │   └── strip-eof@1.0.0
    │ └── widest-line@2.0.1
    ├─┬ chalk@2.4.2
    │ ├─┬ ansi-styles@3.2.1
    │ │ └─┬ color-convert@1.9.3
    │ │   └── color-name@1.1.3
    │ └── escape-string-regexp@1.0.5
    ├─┬ configstore@3.1.2
    │ ├─┬ dot-prop@4.2.0
    │ │ └── is-obj@1.0.1
    │ ├── graceful-fs@4.2.3
    │ ├─┬ make-dir@1.3.0
    │ │ └── pify@3.0.0
    │ ├─┬ unique-string@1.0.0
    │ │ └── crypto-random-string@1.0.0
    │ └─┬ write-file-atomic@2.4.3
    │   ├── imurmurhash@0.1.4
    │   └── signal-exit@3.0.2
    ├── import-lazy@2.1.0
    ├─┬ is-ci@1.2.1
    │ └── ci-info@1.6.0
    ├─┬ is-installed-globally@0.1.0
    │ ├─┬ global-dirs@0.1.1
    │ │ └── ini@1.3.5
    │ └─┬ is-path-inside@1.0.1
    │   └── path-is-inside@1.0.2
    ├── is-npm@1.0.0
    ├─┬ latest-version@3.1.0
    │ └─┬ package-json@4.0.1
    │   ├─┬ got@6.7.1
    │   │ ├─┬ create-error-class@3.0.2
    │   │ │ └── capture-stack-trace@1.0.1
    │   │ ├── duplexer3@0.1.4
    │   │ ├── is-redirect@1.0.0
    │   │ ├── is-retry-allowed@1.2.0
    │   │ ├── lowercase-keys@1.0.1
    │   │ ├── safe-buffer@5.2.0
    │   │ ├── timed-out@4.0.1
    │   │ ├── unzip-response@2.0.1
    │   │ └─┬ url-parse-lax@1.0.0
    │   │   └── prepend-http@1.0.4
    │   ├─┬ registry-auth-token@3.4.0
    │   │ └─┬ rc@1.2.8
    │   │   ├── deep-extend@0.6.0
    │   │   ├── minimist@1.2.0
    │   │   └── strip-json-comments@2.0.1
    │   └── registry-url@3.1.0
    ├── semver-diff@2.1.0
    └── xdg-basedir@3.0.0

La liste est un peu longue mais vous comprenez le principe.

Comment installer des modules npm localement

Les modules locaux npm vous permettent d’utiliser des librairies, des frameworks et des bases de code dans vos projets.

Lorsque vous développez un projet, vous avez besoin d’un fichier appelé package.json afin de noter vos dépendances et de pouvoir les réinstaller au besoin.

Prenons un exemple simple, vous venez de terminer votre développement et vous voulez mettre en ligne votre application sur un serveur Debian, vous voulez transférer votre code mais pas vos node_modules pour éviter les conflits d’OS.

C’est dans cette situation que package.json va servir.

Pour créer le fichier package.json, vous devez utiliser une commande à la localisation de votre futur projet :

npm init

Ici, vous allez devoir remplir une configuration. Elle vous sera utile si vous voulez mettre en ligne votre package.

name: (test) testpackage
version: (1.0.0) 1.0.0
description: un package pour mon tuto
entry point: (index.js) index.js
test command: 
git repository: 
keywords: 
author: Gaïlen Collignon
license: (ISC) 
About to write to /home/gailen/test/package.json:

{
  "name": "testpackage",
  "version": "1.0.0",
  "description": "un package pour mon tuto",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "Gaïlen Collignon",
  "license": "ISC"
}

Vous possédez maintenant un projet NodeJS utilisable et dans les normes. Vous pouvez maintenant installer des modules.

Essayons par exemple d’installer express

npm install express

On obtiens cette réponse :

/home/gailen/test
└─┬ express@4.17.1 
  ├─┬ accepts@1.3.7 
  │ ├─┬ mime-types@2.1.26 
  │ │ └── mime-db@1.43.0 
  │ └── negotiator@0.6.2 
  ├── array-flatten@1.1.1 
  ├─┬ body-parser@1.19.0 
  │ ├── bytes@3.1.0 
  │ ├─┬ http-errors@1.7.2 
  │ │ ├── inherits@2.0.3 
  │ │ └── toidentifier@1.0.0 
  │ ├─┬ iconv-lite@0.4.24 
  │ │ └── safer-buffer@2.1.2 
  │ └── raw-body@2.4.0 
  ├── content-disposition@0.5.3 
  ├── content-type@1.0.4 
  ├── cookie@0.4.0 
  ├── cookie-signature@1.0.6 
  ├─┬ debug@2.6.9 
  │ └── ms@2.0.0 
  ├── depd@1.1.2 
  ├── encodeurl@1.0.2 
  ├── escape-html@1.0.3 
  ├── etag@1.8.1 
  ├─┬ finalhandler@1.1.2 
  │ └── unpipe@1.0.0 
  ├── fresh@0.5.2 
  ├── merge-descriptors@1.0.1 
  ├── methods@1.1.2 
  ├─┬ on-finished@2.3.0 
  │ └── ee-first@1.1.1 
  ├── parseurl@1.3.3 
  ├── path-to-regexp@0.1.7 
  ├─┬ proxy-addr@2.0.5 
  │ ├── forwarded@0.1.2 
  │ └── ipaddr.js@1.9.0 
  ├── qs@6.7.0 
  ├── range-parser@1.2.1 
  ├── safe-buffer@5.1.2 
  ├─┬ send@0.17.1 
  │ ├── destroy@1.0.4 
  │ ├── mime@1.6.0 
  │ └── ms@2.1.1 
  ├── serve-static@1.14.1 
  ├── setprototypeof@1.1.1 
  ├── statuses@1.5.0 
  ├─┬ type-is@1.6.18 
  │ └── media-typer@0.3.0 
  ├── utils-merge@1.0.1 
  └── vary@1.1.2 

Ici, si vous ouvrez le dossier node_modules, vous allez trouver le module express et ses dépendances. De plus, si vous ouvrez package.json, vous verrez express et sa version actuelle.

Vous savez maintenant comment installer un module NodeJS pour vos projets.

Gérer vos modules avec package.json

Package.json vous donne beaucoup d’informations. Par exemple, le ^ présent devant la version d’express vous indique qu’il as téléchargé la dernière version officielle et stable disponible.

Toutes ces informations vont vous permettre de cloner les modules d’un autre projet. Imaginons que vous ayez développé un site web, vous mettez le code en ligne mais rien ne marche, vous n’avez pas les nodes_modules

Il vous suffit de faire :

npm install

Et en quelques temps, tout vos modules sont installés et votre application fonctionne parfaitement.

Comment désinstaller des modules npm

Il aussi possible de désinstaller une dépendance avec npm. La solution simple serait de supprimer le dossier nodemodules mais c’est une erreur. Votre application va buger et la dépendance restera dans package.json

Pour supprimer une dépendance, il vous suffit de faire cette commande :

npm uninstall express

Comment installer une version spécifique

Parfois, vous voulez installer une version spécifique. De nouvelles fonctionnalités beta vous intéressent ? Vous voulez utiliser des fonctionnalités deprecated ?

Dans ce cas, il suffit de lancer npm install et de spécifier la version avec un @

npm install express@1.0.0

Ici je spécifie que je veux installer la version 1.0.0 de express

Mettre à jour des modules npm

Il est important de mettre à jour ses modules de temps en temps. Npm vous permets de le faire grâce à 3 commandes.

Vous pouvez avoir des informations sur les modules à mettre à jour grâce à cette commande:

npm outdated

SI un de vos module n’es pas à jour, vous aurez l’information. Ensuite, vous pouvez le mettre à jour grâce à cette commande (ici j’utilise l’exemple d’express) :

npm update express

Si vous voulez mettre à jour tout les modules, vous n’avez qu’à faire cette commande :

npm update

En conclusion

Dans ce tutoriel, je vous ai expliqué les fonctionnalités de bases de npm. Normalement, vous êtes prêts à développer vos applications NodeJS et à gérer vos dépendances sans trop de soucis.

Vous avez vu qu’il y a deux grands types de packages, les globaux et les locaux. Vous savez les installer, les modifier, les supprimer. A partir de là, vous avez toutes les bases pour continuer.

Aujourd’hui, on utilise même NPM pour installer des librairies avec des frameworks comme ReactJS pour ensuite les compiler avec des outils comme webpack. NPM est utilisé partout, c’est même le choix préféré pour installer les outils de compilation windows.

Si cet article vous as plu, n’hésitez pas à télécharger mon livre PDF qui vous apprendra à bien débuter la programmation.

Vous abonner à notre newsletter

* champ requis

Laisser un commentaire

Fermer le menu
×
×

Panier