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.