Node.js - NPM

Node Package Manager (NPM) proporciona dos funcionalidades principales:

  • Repositorios en línea para paquetes / módulos de node.js que se pueden buscar en search.nodejs.org

  • Utilidad de línea de comandos para instalar paquetes de Node.js, realizar la gestión de versiones y la gestión de dependencias de los paquetes de Node.js.

NPM viene incluido con los instalables de Node.js después de la versión v0.6.3. Para verificar lo mismo, abra la consola y escriba el siguiente comando y vea el resultado:

$ npm --version
2.7.1

Si está ejecutando una versión anterior de NPM, es bastante fácil actualizarla a la última versión. Simplemente use el siguiente comando desde la raíz:

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

Instalación de módulos usando NPM

Hay una sintaxis simple para instalar cualquier módulo de Node.js:

$ npm install <Module Name>

Por ejemplo, a continuación se muestra el comando para instalar un famoso módulo de marco web de Node.js llamado express:

$ npm install express

Ahora puede usar este módulo en su archivo js de la siguiente manera:

var express = require('express');

Instalación global vs local

De forma predeterminada, NPM instala cualquier dependencia en el modo local. Aquí, el modo local se refiere a la instalación del paquete en el directorio node_modules que se encuentra en la carpeta donde está presente la aplicación Node. Los paquetes implementados localmente son accesibles a través del método require (). Por ejemplo, cuando instalamos el módulo express, creó el directorio node_modules en el directorio actual donde instaló el módulo express.

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

Alternativamente, puede usar npm ls comando para enumerar todos los módulos instalados localmente.

Los paquetes / dependencias instalados globalmente se almacenan en el directorio del sistema. Dichas dependencias se pueden usar en la función CLI (Command Line Interface) de cualquier node.js pero no se pueden importar usando require () en la aplicación Node directamente. Ahora intentemos instalar el módulo express utilizando la instalación global.

$ npm install express -g

Esto producirá un resultado similar pero el módulo se instalará globalmente. Aquí, la primera línea muestra la versión del módulo y la ubicación donde se está instalando.

[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] (negoti[email protected], [email protected])
└── [email protected] ([email protected], [email protected])

Puede usar el siguiente comando para verificar todos los módulos instalados globalmente:

$ npm ls -g

Usando package.json

package.json está presente en el directorio raíz de cualquier aplicación / módulo Node y se usa para definir las propiedades de un paquete. Abramos package.json del paquete express presente ennode_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!"
}

Atributos de Package.json

  • name - nombre del paquete

  • version - versión del paquete

  • description - descripción del paquete

  • homepage - página de inicio del paquete

  • author - autor del paquete

  • contributors - nombre de los contribuyentes al paquete

  • dependencies- lista de dependencias. NPM instala automáticamente todas las dependencias mencionadas aquí en la carpeta node_module del paquete.

  • repository - tipo de repositorio y URL del paquete

  • main - punto de entrada del paquete

  • keywords - palabras clave

Desinstalar un módulo

Utilice el siguiente comando para desinstalar un módulo de Node.js.

$ npm uninstall express

Una vez que NPM desinstale el paquete, puede verificarlo mirando el contenido del directorio / node_modules / o escribiendo el siguiente comando:

$ npm ls

Actualizar un módulo

Actualice package.json y cambie la versión de la dependencia que se actualizará y ejecute el siguiente comando.

$ npm update express

Buscar un módulo

Busque un nombre de paquete usando NPM.

$ npm search express

Crear un módulo

La creación de un módulo requiere que se genere package.json. Generemos package.json usando NPM, que generará el esqueleto básico del 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)

Deberá proporcionar toda la información requerida sobre su módulo. Puede obtener ayuda del archivo package.json mencionado anteriormente para comprender el significado de la información solicitada. Una vez que se genera package.json, use el siguiente comando para registrarse en el sitio del repositorio de NPM usando una dirección de correo electrónico válida.

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

Ha llegado el momento de publicar su módulo.

$ npm publish

Si todo está bien con su módulo, entonces se publicará en el repositorio y será accesible para instalar usando NPM como cualquier otro módulo de Node.js.