Node.js - NPM

Node Package Manager (NPM) fornisce due funzionalità principali:

  • Repository online per pacchetti / moduli node.js che sono ricercabili su search.nodejs.org

  • Utilità della riga di comando per installare i pacchetti Node.js, eseguire la gestione delle versioni e la gestione delle dipendenze dei pacchetti Node.js.

NPM viene fornito in bundle con gli installabili Node.js dopo la versione v0.6.3. Per verificare lo stesso, apri la console e digita il seguente comando e guarda il risultato:

$ npm --version
2.7.1

Se si esegue una vecchia versione di NPM, è abbastanza facile aggiornarla all'ultima versione. Usa semplicemente il seguente comando da root:

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

Installazione di moduli utilizzando NPM

C'è una semplice sintassi per installare qualsiasi modulo Node.js -

$ npm install <Module Name>

Ad esempio, di seguito è riportato il comando per installare un famoso modulo framework web Node.js chiamato express -

$ npm install express

Ora puoi usare questo modulo nel tuo file js come segue:

var express = require('express');

Installazione globale e locale

Per impostazione predefinita, NPM installa qualsiasi dipendenza in modalità locale. Qui la modalità locale si riferisce all'installazione del pacchetto nella directory node_modules che si trova nella cartella in cui è presente l'applicazione Node. I pacchetti distribuiti localmente sono accessibili tramite il metodo require (). Ad esempio, quando abbiamo installato il modulo express, ha creato la directory node_modules nella directory corrente in cui è installato il modulo express.

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

In alternativa, puoi usare npm ls comando per elencare tutti i moduli installati localmente.

I pacchetti / le dipendenze installati a livello globale vengono archiviati nella directory di sistema. Tali dipendenze possono essere utilizzate nella funzione CLI (Command Line Interface) di qualsiasi node.js ma non possono essere importate utilizzando require () direttamente nell'applicazione Node. Ora proviamo a installare il modulo express usando l'installazione globale.

$ npm install express -g

Questo produrrà un risultato simile ma il modulo verrà installato globalmente. Qui, la prima riga mostra la versione del modulo e la posizione in cui viene installato.

[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])

È possibile utilizzare il seguente comando per controllare tutti i moduli installati a livello globale:

$ npm ls -g

Utilizzando package.json

package.json è presente nella directory root di qualsiasi applicazione / modulo Node e viene utilizzato per definire le proprietà di un pacchetto. Apriamo package.json del pacchetto express presente innode_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": "express@*",
   "_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!"
}

Attributi di Package.json

  • name - nome del pacchetto

  • version - versione del pacchetto

  • description - descrizione del pacchetto

  • homepage - homepage del pacchetto

  • author - autore del pacchetto

  • contributors - nome dei contributori al pacchetto

  • dependencies- elenco delle dipendenze. NPM installa automaticamente tutte le dipendenze qui menzionate nella cartella node_module del pacchetto.

  • repository - tipo di repository e URL del pacchetto

  • main - punto di ingresso del pacchetto

  • keywords - parole chiave

Disinstallazione di un modulo

Utilizzare il seguente comando per disinstallare un modulo Node.js.

$ npm uninstall express

Una volta che NPM disinstalla il pacchetto, puoi verificarlo guardando il contenuto della directory / node_modules / o digita il seguente comando:

$ npm ls

Aggiornamento di un modulo

Aggiorna package.json e cambia la versione della dipendenza da aggiornare ed esegui il seguente comando.

$ npm update express

Cerca un modulo

Cerca il nome di un pacchetto utilizzando NPM.

$ npm search express

Crea un modulo

La creazione di un modulo richiede la generazione di package.json. Generiamo package.json utilizzando NPM, che genererà lo scheletro di base di 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)

Dovrai fornire tutte le informazioni richieste sul tuo modulo. Puoi chiedere aiuto al file package.json sopra menzionato per comprendere il significato delle varie informazioni richieste. Una volta generato package.json, utilizzare il seguente comando per registrarsi al sito del repository NPM utilizzando un indirizzo e-mail valido.

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

È giunto il momento di pubblicare il tuo modulo -

$ npm publish

Se tutto va bene con il tuo modulo, allora sarà pubblicato nel repository e sarà accessibile per l'installazione utilizzando NPM come qualsiasi altro modulo Node.js.