Node.js - NPM

Node Package Manager (NPM) fournit deux fonctionnalités principales -

  • Dépôts en ligne pour les packages / modules node.js qui peuvent être recherchés sur search.nodejs.org

  • Utilitaire de ligne de commande pour installer les packages Node.js, gérer les versions et les dépendances des packages Node.js.

NPM est livré avec les installables Node.js après la version v0.6.3. Pour vérifier la même chose, ouvrez la console et tapez la commande suivante et voyez le résultat -

$ npm --version
2.7.1

Si vous utilisez une ancienne version de NPM, il est assez facile de la mettre à jour vers la dernière version. Utilisez simplement la commande suivante à partir de la racine -

$ sudo npm install npm -g
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
[email protected] /usr/lib/node_modules/npm

Installation de modules à l'aide de NPM

Il existe une syntaxe simple pour installer n'importe quel module Node.js -

$ npm install <Module Name>

Par exemple, voici la commande pour installer un célèbre module de framework Web Node.js appelé express -

$ npm install express

Vous pouvez maintenant utiliser ce module dans votre fichier js comme suit -

var express = require('express');

Installation globale ou locale

Par défaut, NPM installe toute dépendance en mode local. Ici, le mode local fait référence à l'installation du package dans le répertoire node_modules se trouvant dans le dossier où l'application Node est présente. Les packages déployés localement sont accessibles via la méthode require (). Par exemple, lorsque nous avons installé le module express, il a créé le répertoire node_modules dans le répertoire courant où il a installé le module express.

$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules

Vous pouvez également utiliser npm ls commande pour lister tous les modules installés localement.

Les packages / dépendances installés globalement sont stockés dans le répertoire système. Ces dépendances peuvent être utilisées dans la fonction CLI (interface de ligne de commande) de n'importe quel node.js mais ne peuvent pas être importées à l'aide de require () dans l'application Node directement. Essayons maintenant d'installer le module express en utilisant l'installation globale.

$ npm install express -g

Cela produira un résultat similaire mais le module sera installé globalement. Ici, la première ligne montre la version du module et l'emplacement où il est installé.

[email protected] /usr/lib/node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected])

Vous pouvez utiliser la commande suivante pour vérifier tous les modules installés globalement -

$ npm ls -g

Utilisation de package.json

package.json est présent dans le répertoire racine de toute application / module Node et est utilisé pour définir les propriétés d'un package. Ouvrons package.json du package express présent dansnode_modules/express/

{
   "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.11.2",
      "author": {
      
         "name": "TJ Holowaychuk",
         "email": "[email protected]"
      },
   
   "contributors": [{
      "name": "Aaron Heckmann",
      "email": "[email protected]"
   }, 
   
   {
      "name": "Ciaran Jessup",
      "email": "[email protected]"
   },
   
   {
      "name": "Douglas Christopher Wilson",
      "email": "[email protected]"
   },
   
   {
      "name": "Guillermo Rauch",
      "email": "[email protected]"
   },
   
   {
      "name": "Jonathan Ong",
      "email": "[email protected]"
   },
   
   {
      "name": "Roman Shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "Young Jae Sim",
      "email": "[email protected]"
   } ],
   
   "license": "MIT", "repository": {
      "type": "git",
      "url": "https://github.com/strongloop/express"
   },
   
   "homepage": "https://expressjs.com/", "keywords": [
      "express",
      "framework",
      "sinatra",
      "web",
      "rest",
      "restful",
      "router",
      "app",
      "api"
   ],
   
   "dependencies": {
      "accepts": "~1.2.3",
      "content-disposition": "0.5.0",
      "cookie-signature": "1.0.5",
      "debug": "~2.1.1",
      "depd": "~1.0.0",
      "escape-html": "1.0.1",
      "etag": "~1.5.1",
      "finalhandler": "0.3.3",
      "fresh": "0.2.4",
      "media-typer": "0.3.0",
      "methods": "~1.1.1",
      "on-finished": "~2.2.0",
      "parseurl": "~1.3.0",
      "path-to-regexp": "0.1.3",
      "proxy-addr": "~1.0.6",
      "qs": "2.3.3",
      "range-parser": "~1.0.2",
      "send": "0.11.1",
      "serve-static": "~1.8.1",
      "type-is": "~1.5.6",
      "vary": "~1.0.0",
      "cookie": "0.1.2",
      "merge-descriptors": "0.0.2",
      "utils-merge": "1.0.0"
   },
   
   "devDependencies": {
      "after": "0.8.1",
      "ejs": "2.1.4",
      "istanbul": "0.3.5",
      "marked": "0.3.3",
      "mocha": "~2.1.0",
      "should": "~4.6.2",
      "supertest": "~0.15.0",
      "hjs": "~0.0.6",
      "body-parser": "~1.11.0",
      "connect-redis": "~2.2.0",
      "cookie-parser": "~1.3.3",
      "express-session": "~1.10.2",
      "jade": "~1.9.1",
      "method-override": "~2.3.1",
      "morgan": "~1.5.1",
      "multiparty": "~4.1.1",
      "vhost": "~3.0.0"
   },
   
   "engines": {
      "node": ">= 0.10.0"
   },
   
   "files": [
      "LICENSE",
      "History.md",
      "Readme.md",
      "index.js",
      "lib/"
   ],
   
   "scripts": {
      "test": "mocha --require test/support/env 
         --reporter spec --bail --check-leaks test/ test/acceptance/",
      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha 
         -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
      "test-tap": "mocha --require test/support/env 
         --reporter tap --check-leaks test/ test/acceptance/",
      "test-travis": "istanbul cover node_modules/mocha/bin/_mocha 
         --report lcovonly -- --require test/support/env 
         --reporter spec --check-leaks test/ test/acceptance/"
   },
   
   "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
   "bugs": {
      "url": "https://github.com/strongloop/express/issues"
   },
   
   "_id": "[email protected]",
   "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
   "_from": "[email protected]*",
   "_npmVersion": "1.4.28",
   "_npmUser": {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   "maintainers": [{
      "name": "tjholowaychuk",
      "email": "[email protected]"
   },
   
   {
      "name": "jongleberry",
      "email": "[email protected]"
   },
   
   {
      "name": "shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   {
      "name": "aredridel",
      "email": "[email protected]"
   },
   
   {
      "name": "strongloop",
      "email": "[email protected]"
   },
   
   {
      "name": "rfeng",
      "email": "[email protected]"
   }],
   
   "dist": {
      "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
      "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz"
   },
   
   "directories": {},
      "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
      "readme": "ERROR: No README data found!"
}

Attributs de Package.json

  • name - nom du package

  • version - version du package

  • description - description du forfait

  • homepage - page d'accueil du package

  • author - auteur du package

  • contributors - nom des contributeurs au package

  • dependencies- liste des dépendances. NPM installe automatiquement toutes les dépendances mentionnées ici dans le dossier node_module du package.

  • repository - type de référentiel et URL du package

  • main - point d'entrée du forfait

  • keywords - mots-clés

Désinstaller un module

Utilisez la commande suivante pour désinstaller un module Node.js.

$ npm uninstall express

Une fois que NPM a désinstallé le package, vous pouvez le vérifier en consultant le contenu du répertoire / node_modules / ou en tapant la commande suivante -

$ npm ls

Mettre à jour un module

Mettez à jour package.json et modifiez la version de la dépendance à mettre à jour et exécutez la commande suivante.

$ npm update express

Rechercher un module

Recherchez un nom de package à l'aide de NPM.

$ npm search express

Créer un module

La création d'un module nécessite que package.json soit généré. Générons package.json en utilisant NPM, qui générera le squelette de base du package.json.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.

See 'npm help json' for definitive documentation on these fields
and exactly what they do.

Use 'npm install <pkg> --save' afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (webmaster)

Vous devrez fournir toutes les informations requises sur votre module. Vous pouvez prendre l'aide du fichier package.json mentionné ci-dessus pour comprendre la signification des diverses informations demandées. Une fois package.json généré, utilisez la commande suivante pour vous inscrire sur le site de référentiel NPM à l'aide d'une adresse e-mail valide.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) [email protected]

Il est temps maintenant de publier votre module -

$ npm publish

Si tout va bien avec votre module, il sera publié dans le référentiel et pourra être installé à l'aide de NPM comme n'importe quel autre module Node.js.