Difference between revisions of "Npm"

From Wiki de Caballero
Jump to navigation Jump to search
Line 106: Line 106:

npm install <package> --save-dev

npm install <package> --save-dev
</source>
</source>
===package.json vs package-lock.json===
Para una explicación de la diferencia entre package.json y package-lock.json, ver [https://stackoverflow.com/a/53578685/1071459 npm - Do I need both package-lock.json and package.json? - Stack Overflow].


==Autocompletar==
==Autocompletar==
Line 113: Line 116:
</source>
</source>


Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de '''npm'''. 
Est autocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.
Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de '''npm'''. 
Esteautocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.


==npm sin sudo==
==npm sin sudo==

Revision as of 16:24, 4 July 2019

Qué es npm

El sitio de npm es npmjs.com.

En la esquina izquierda superior tienen una broma que le da significados divertidos a las siglas npm, pero en realidad significa Node Package Manager.

Fue pensado inicialmente para manejar paquetes de Node, un framework creado para usar javascript en el servidor, una de las ideas detrás de Node es usar el mismo lenguaje en el servidor y en el cliente así simplificando el proceso de desarrollo.


Como npm fue creado inicialmente como una herramienta para Node.js, tiene paquetes pues... para Node.js. Más adelante se agregaron paquetes de javascript para el cliente y herramientas de CLI (Command Line Interface, linea de comandos).

Instalación

Para instalar npm hay que tener Node instalado. Para instalar Node se puede usar:

Para que npm funcione debemos tener una versión de Node.js mayor a 0.10.32. npm es independiente de Node.js por lo que se puede tener una versión antigua de Node.js y una versión nueva de npm.

Con el siguiente comando se revisa qué versión de npm está instalada:

npm -v


Para instalar la ultima versión se ejecuta:

npm install npm@latest -g

Nota: Dependiendo del tipo de instalación el upgrade puede que tenga que ser diferente, usar el método de upgrade apropiado dependiendo de cómo se instaló.

Nota: Si se usa #Manejo de paquetes leer la nota al final de esa sección ya que la actualización va a ser un poco diferente.

Manejo de paquetes

npm permite instalar paquetes localmente o globalmente. Localmente significa que se instalan en el directorio actual de trabajo y globalmente significa que se instalan en el directorio global de npm, normalmente este directorio se encuentra /usr/local en un sistema tipo Unix pero esto puede cambiar dependiendo del sistema operativo, para saber donde instala paquetes npm se puede ejecutar el siguiente comando:

npm config get prefix


En la documentación explican que es posible que el directorio de instalación tenga problemas de permisos, este link puede ayudar. En ese mismo link se explica cómo cambiar el directorio por defecto.


Ejemplos:

# Setear el directorio para instalar paquetes
npm config set prefix ~/.npm-packages
# Eliminar la configuracion de donde instalar los paquetes
npm config delete prefix
# Obtener configuracion de donde instalar los paquetes
npm config get prefix

Para que los comandos puedan ser ejecutados directamente hay que indicarle al terminal que incluya los comandos en el PATH.

export PATH=$PATH:/Users/felipe/.npm-packages/bin

Nota: Si se trata de actualizar npm usando el prefix para la ubicación de paquetes el npm que se usa seguramente va a ser el instalado inicialmente y no se va a actualizar. Para evitar este comportamiento, delete prefix momentaneamente.

Instalar paquetes

Instalar global vs local

Como regla general: los paquetes que se van a usar solamente en el proyecto actual deberían instalarse localmente. Si un paquete proporciona una herramienta CLI se instala globalmente.

Más info: npm 1.0: Global vs Local installation | Node.js

Ejemplo local

# En una carpeta nueva ejecutar
npm install jquery
# El siguiente comando muestra lo instalado localmente
npm ls

Ejemplo global

npm install -g jquery
# El siguiente comando muestra lo instalado globalmente
npm ls -g

package.json

Para qué sirve

Con un archivo especial se puede definir qué paquetes hacen parte de un proyecto, este archivo es package.json.

Es una forma de mantener un registro de los paquetes que necesita el proyecto actual. Si ya existe el archivo package.json y se quiere instalar los paquetes que especifica se ejecuta:

npm install

Crear archivo package.json

Para crea un archivo package.json se puede de las siguientes formas:

  • npm init, crea el archivo luego de responder algunas preguntas.
  • npm init --yes, igual al anterior pero omite algunas preguntas y las deja con un valor por defecto.
  • Manualmente, como es un archivo de texto se puede crear manualmente.

Para más info ver 05 - Working with package.json | npm Documentation.

dependencies vs devDependencies

Una vez que está el archivo creado, los paquetes a instalar se especifican en dos posibles grupos: dependencies y devDependencies.

La diferencia entre estos dos grupos es que en el primero se instalan los paquetes definitivos y en el segundo que empieza con dev se instalan solo aquellos a usar en etapa de desarrollo.

Para agregar paquetes al archivo se puede hacer manualmente o usando un comando. Los comandos son los siguientes:

# Para agregar el paquete a dependencies

npm install <package> --save
# Para agregar el paquete a devDependencies

npm install <package> --save-dev

package.json vs package-lock.json

Para una explicación de la diferencia entre package.json y package-lock.json, ver npm - Do I need both package-lock.json and package.json? - Stack Overflow.

Autocompletar

Para los fanáticos de autocompletar, npm tiene una herramienta. La herramienta es un poco de código en bash. El código se obtiene ejecutando npm completion. Para que funcione este código hay que agregarlo a alguno de los comandos de iniciación de un terminal, para cada sistema esto varia un poco pero eso se sale del alcance de este tutorial. Asumiendo que se está usando un macOS, para que cada vez que se cargue la terminal se cargue el script de autocompletado se ejecuta:

npm completion >> ~/.profile

Para probarlo, cerramos la terminal y la abrimos de nuevo y ahora usando TAB podemos usar el autocompletado de npm. 
Esteautocompletado no muestra los paquetes que están online, si los comandos locales y aparentemente los paquetes que ya se han instalado globalmente.

npm sin sudo

Ver John Papa: Node and npm without sudo.

Referencias