tl;dr
Las dependencies
son requeridas por nuestra aplicación en tiempo de ejecución. Paquetes como react
, redux
y lodash
son todos ejemplos de dependencias. Las devDependencies
solo son necesarias para desarrollar o compilar su aplicación. Paquetes como babel
, enzyme
y prettier
son ejemplos de devDependencies.
npm install
La diferencia real entre dependencies
y devDependencies
se ve cuando ejecuta npm install
.
Si ejecuta npm install
desde un directorio que contiene un archivo package.json
(lo que normalmente hace después de clonar un proyecto, por ejemplo).
✅ Se instalarán todos los paquetes ubicados en dependencies
✅ Se instalarán todos los paquetes ubicados en devDependencies
Si ejecuta npm install <package-name>
(lo que normalmente hace cuando desea agregar un nuevo paquete aL proyecto existente), es decir, npm install react
.
✅ Se instalarán todos los paquetes ubicados en dependencies
❌ No se instalará ninguno de los paquetes ubicados en devDependencies
Dependencias transitivas
Si el paquete A depende del paquete B y el paquete B depende de C, entonces el paquete C es una dependencia transitiva del paquete A. Lo que eso significa es que para que el paquete A se ejecute correctamente, necesita el paquete B instalado. Sin embargo, para que el paquete B se ejecute correctamente, es necesario que esté instalado el paquete C. ¿Por qué menciono esto? Bueno, las dependencies
y devDependencies
también tratan las dependencias transitivas de manera diferente.
Cuando ejecutas npm install
desde un directorio que contiene un archivo package.json
:
-
dependencies
✅ Descarga todas las dependencias transitivas. -
devDependencies
❌ No descarga ninguna dependencia transitiva.
Especificar dependencies frente a devDependencies
A partir de NPM 5, cuando ejecuta npm install <package-name>
, ese paquete se guardará automáticamente dentro de sus dependencies
en su archivo package.json
. Si quisiera especificar que el paquete específico debería incluirse en devDependencies
en su lugar, agregaría la marca --save-dev
.
npm install prettier --save-dev
Instalación en un servidor de producción
A menudo, necesitará instalar su proyecto en un servidor de producción. Cuando haga eso, no querrá instalar devDependencies
ya que obviamente no las necesitará en su servidor de producción. Para instalar solo las dependencies
(y no devDependencies
), puede usar la marca --production
.
npm install --production
Top comments (1)
Hola Khriztian,
Muy buen post, tengo una pregunta, espero puedas ayudarme.
En el caso de las dependencias transitivas, al instalar en el paquete A la dependencia transitiva C, se instala tanto las dependencies y las devDependencies o solo las dependencies del paquete C?