Fork me on GitHub

NodeJS - NPM

Node Package Manager

El administrador de paquetes de NodeJS nos permite agregar dependencias a nuestros proyectos.

NPM viene incluido dentro de la instalación de NodeJs.

Para instalar NodeJS se puede descargar del sitio web.

Se puede instalar desde el administrador de paquetes del sistema operativo:

CentOS
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - sudo yum install -y nodejs
Ubuntu
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash sudo apt-get install -y nodejs
MAC OS X
brew install node

Se puede instalar con NVM(Node Version Manager)

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash nvm install node nvm use node

Obtener versión de NodeJS:

node -v

Obtener versión de NPM:

npm -v

Actualizar

npm install npm@latest -g

El archivo package.json sirve para guardar información del proyecto así como las dependencias que se deben instalar para su buen funcionamiento, dicha información es:

  • name: string

  • version: string

  • description: string

  • author: string

  • license: string

Sirve para indicar que archivos se van a incluir dentro del paquete enviado a NPM.

El archivo .npmignore junto al .gitignore sirve para ignorar archivos.

En cualquer directorio, inicializar proyecto mediante:

npm init --yes

Se generará el archivo package.json con el siguiente contenido:

  • Se toma la información del directorio actual.

  • Si se tiene un README.md se tomará la descripción de ahí.

{
  "name": "nodejs-npm",
  "version": "1.0.0",
  "description": "Node Package Manager explanation",
  "main": "index.js",
  "directories": {
    "doc": "docs"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/lenin-anzen/nodejs-npm.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/lenin-anzen/nodejs-npm/issues"
  },
  "homepage": "https://github.com/lenin-anzen/nodejs-npm#readme"
}

Buscar paquetes:

npm search <package_name>

Buscar la última versión de un paquete:

npm view <package_name> version

Buscar todas las versiones de un paquete:

npm view <package_name> versions
npm show <package_name> versions
npm info <package_name> versions
npm v <package_name> versions

Para descargar un paquete al directorio node_modules dentro del directorio actual:

npm install <package_name>

Existen diferentes tipos de dependencias en el archivo package.json:

  • "dependencies": Estos paquetes son requeridos por la aplicación para producción:

    • npm install <package_name> --save
  • "devDependencies": Estos paquetes son requeridos sólo para desarrollo y pruebas:

    • npm install <package_name> -D
    • npm install <package_name> --save-dev
  • "peerDependencies": :

  • "bundledDependencies": :

  • "optionalDependencies": :

Se generará el directorio node_modules

Se acualizará el archivo package.json con el paquete y su última versión.

Instalación global de paquetes:

npm install -g <package_name>

Instalación de una versión específica:

npm install --save <package_name>@<version>
npm install --save eslint@4.1.1

Instalación de un rango de versiones:

npm install --save <package_name>@<version range>
npm install --save eslint@>=0.1.0 <0.2.0<

Instalación de los paquetes que se encuentran en el archivo package.json:

npm install

Instalación desde un repositorio del GIT:

npm install git+https://lenin-anzen@github.com/eslint/eslint.git

Se pueden instalar paquetes desde la cache usando las opciones:

--offline --prefer-offline

Actualizar paquetes locales:

  • npm update

Obtener paquetes desactualizados:

  • npm outdated
Package   Current  Wanted  Latest  Location
eslint     3.19.0  3.19.0   4.1.1  package_name
jest       19.0.2  19.0.2  20.0.4  package_name
jest-cli   19.0.2  19.0.2  20.0.4  package_name

Actualizar paquete instalado globalmente:

  • npm update -g <package_name>

Obtener paquetes desactualizados globalmente:

  • npm outdated -g --depth=0

Desinstalar paquete para producción:

  • npm uninstall --save <package_name>

Desinstalar paquete para desarrollo y pruebas:

  • npm uninstall --save-dev <package_name>

Desinstalar paquete global:

  • npm uninstall -g <package_name>

Se pueden especificar reglas para obtener ciertas versiones de los paquetes cuando actualizemos con:

npm update

Suponiendo que el paquete instalado tiene la versión 1.0.4, en nuestro archivo package.json debemos especificar la versión a la cuál quereemos actualizar.

  • Versiones de parches / Aproximadamente equivalente a la versión: 1.0 or 1.0.x or ~1.0.4
  • Lanzamientos menores / Compatible con la versión: 1 or 1.x or ^1.0.4
  • Lanzamientos principales / Cualquier versión: * or x

Un ejemplo de las versiones de dependencias es:

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}

Se debe tener como mínimo un package.json generado con el comando:

npm init --yes

Crear/Configurar usuario

Para crear un usuario se puede realizar de dos formas:

  1. Mediante el comando:

    npm adduser
  2. Crear una cuenta en el sitio web https://www.npmjs.com/signup.

    • Posteriormente ingresar con el comando:

      npm login
Username: lenin-anzen
Password:
Email: (this IS public) lmeza@anzen.com.mx
Logged in as lenin-anzen on https://registry.npmjs.org/.

Publicar el paquete mediante el comando:

npm publish
> my-package@0.0.1 prepublish ~\my-package
> nsp check

(+) No known vulnerabilities found
+ my-package6@0.0.1

El paquete estará disponible en la página del usuario que lo registró https://www.npmjs.com/~

Se debe especificar que el repositorio no es privado mediante la propiedad:

"private": false

De otro modo mostrará el siguiente error:

npm ERR! This package has been marked as private
npm ERR! Remove the 'private' field from the package.json to publish it.

No deben existir archivos sin commit, para comprobar el estado del repositorio:

git status

En dado caso de que se muestre algún archivo, hacerle commit:

git add .
git commit -m "El archivo ha cambiado por que..."

Para actualizar un paquete se deben tomar en cuenta los siguientes tipos de actualizaciones:

  1. patch: v0.0.2

  2. minor: v0.1.0

  3. major: v1.0.0

Mediante el siguiente comando se actualizará la versión del archivo package.json

npm version <tipo de actualización> -m "Added Webpack to the %s version"

Al repositorio de Git se agregará un tag con el número de release.

commit c38a46ee01ff91536cc9ce7591221da0c16c4c7b (HEAD -> master, tag: v0.0.3)
Author: Lenin Meza <lmeza@anzen.com.mx>
Date:   Wed Jul 5 17:04:01 2017 -0500

    0.0.3

Se pueden agregar scripts para ejecutarse junto a la version:

"scripts": {
  "preversion": "npm test",
  "version": "npm run build && git add -A dist",
  "postversion": "git push && git push --tags && rm -rf build/temp"
}

Después de actualizar la versión, publicar el repositorio de nuevo:

npm publish

También se debe hacer push a los commits de GIT:

git push