Tengo esto en mi archivo package.json (versión abreviada):
{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}Estoy usando NPM versión 1.1.1 en Mac 10.6.8.
Cuando ejecuto el siguiente comando desde la raíz del proyecto, instala tanto el dependencies y devDependencies :
npm installTenía la impresión de que este comando instaló el devDependencies:
npm install --dev¿Cómo hago para que npm installsolo se instale dependencies(para que el entorno de producción solo obtenga esos módulos), mientras que algo así como npm install --devinstala ambos dependenciesy devDependencies?

dependenciesydevDependenciesy cuando cada uno de ellos se utiliza.Respuestas:
El
npm installcomando instalará eldevDependenciesotro juntodependenciescuando se ejecute dentro de un directorio de paquetes, en un entorno de desarrollo (el valor predeterminado).Use
npm install --only=prod(o--only=production) para instalar solodependencies, y nodevDependencies,independientemente del valor de laNODE_ENVvariable de entorno.Fuente: npm docs
Nota: Antes de la v3.3.0 de npm (2015-08-13), se llamó a la opción
--production, es decirnpm install --production.fuente
npm install yourpackage.tgzno obtengan también devDependencies. Sin embargo, ese ya es el caso. Vea la respuesta de Kevin Cox a continuación ( stackoverflow.com/a/15826602/825588 ).NODE_ENV=productionalgo más que estaba haciendo y no podía entender por quénpm installno instalar dependencias. Gracias por la respuesta completa.npm install --devsolo instalaría dependencias de desarrollo--devopción está en desuso. Usar en su--only=devlugar.¡También me encuentro con ese problema! La instalación de npm es algo confusa y las publicaciones web siguen trayendo los indicadores -d / - dev como si hubiera un modo de instalación explícito de 'desarrollo'.
npm installinstalará tanto " dependencias " como " devDependencies "npm install --productionsolo instalará " dependencias "npm install --devsolo instalará " devDependencies "fuente
NODE_ENVestá configuradoproductiony lo ejecutanpm install, no instalará dependencias de desarrollo. Me encontré con este problema en mi Dockerfile.npm --production=false install(aunque no estoy seguro de si esto funcionará junto con la bandera --dev)La nueva opción es:
Si desea instalar solo devDependencies:
fuente
--only=prod. Usted, señor, está parcialmente en lo correcto. ; PSi leyó este POST en 2016, logre lo que quiere usando
El argumento hará que solo se instalen devDependencies o solo no devDependencies, independientemente de NODE_ENV.
de: https://docs.npmjs.com/cli/install
fuente
--productiony--only={prod[uction]|dev[elopment]}.Si ya instaló todas sus dependencias y desea evitar tener que descargar nuevamente sus paquetes de producción de NPM, simplemente escriba:
Esto eliminará sus dependencias de desarrollo de su
node_modulescarpeta, lo cual es útil si está tratando de automatizar un proceso de dos pasos como¡Correr
npm pruneen el medio te ahorrará tener que reinstalar todo!fuente
Cuando se utiliza "npm install", los módulos se cargan y están disponibles en toda la aplicación, independientemente de si son "devDependencies" o "dependencias". Suma de esta idea: todo lo que su package.json define como una dependencia (cualquier tipo) se instala en node_modules.
El propósito de la diferencia entre dependencias / devDependencies / optionalDependencies es lo que los consumidores de su código pueden hacer w / npm para instalar estos recursos.
Según la documentación: https://npmjs.org/doc/json.html ...
Sin embargo, para resolver esta pregunta, si SOLO desea instalar las "dependencias" usando npm, el siguiente comando es:
Esto puede confirmarse mirando el commit de Git que agregó este filtro (junto con algunos otros filtros [enumerados a continuación] para proporcionar esta funcionalidad).
Filtros alternativos que pueden ser utilizados por npm:
@dmarr intente usar npm install --production
fuente
npm instalará dependencias de desarrollo al instalar desde dentro de un paquete (si hay un
package.jsonen el directorio actual). Si es de otra ubicación (registro npm, repositorio de git, ubicación diferente en el sistema de archivos) solo instala las dependencias.fuente
npm install some-moduleno instalará las dependencias de desarrollo desome-module.He descubierto que, al intentar instalar dependencias de desarrollo para un paquete que contiene un complemento de nodo, no puede evitar construir el complemento al ejecutar npm install --dev, incluso si solo desea instalar devDependencies. Entonces, tuve que dar la vuelta a npm:
O, mejor (y más sucintamente) todavía,
fuente
Utilice
npm install packageName --saveesta agregará paquete de dependencias , si se utilizanpm install packageName --save-deventonces devDependencies .npm install packageName --save-devdebe usarse para agregar paquetes con fines de desarrollo. Como agregar paquetes TDD (Chai, mocha, etc.). Que se utilizan en el desarrollo y no en la producción.fuente
package.jsonpero una vez que estas dependencias ya están guardadas , entonces, cómo forzar lanpminstalación de solo un tipo específico de dependencia. Cuando leí su respuesta aquí, no aprendí nada que ayude a resolver el problema planteado por el OP.Vale la pena mencionar que puede usar la
NODE_ENVvariable de entorno para lograr el mismo resultado. Particularmente útil si está contenedorizando su aplicación Node (por ejemplo, Docker).El código anterior instalará todas sus dependencias, excepto las de desarrollo (es decir
devDependencies).si necesita utilizar variables de entorno en su
Dockerfilemás información se puede encontrar aquí .Las variables de entorno son fáciles de sobrescribir cuando sea necesario (por ejemplo, si desea ejecutar su conjunto de pruebas, por ejemplo, en Travis CI). Si ese fuera el caso, podría hacer algo como esto:
Documentación de NPM aquí
Contenedor feliz =)
fuente
Sugiero usar
npm ci. Si desea instalar solo paquetes necesarios para la producción (como escribió, sindevDependencies), entonces:o
Si prefiere la vieja escuela,
npm installentonces:o
Aquí hay una buena respuesta por qué debería usar
npm ci.fuente
npm ci, ¡no solonpm install!Necesita agregar a la respuesta elegida: a partir de ahora,
npm installen un directorio de paquetes (que contienepackage.json) instalará devDependencies, mientrasnpm install -gque no las instalará.fuente
-gno se instalarádevDependencies, pero sí instala los paquetes globalmente, lo que a menudo no es el resultado esperado.npm install --productiones la forma correcta de instalar módulos de nodo que son necesarios para la producción. Consulte la documentación para más detalles.fuente
Ahora hay un problema, si tiene package-lock.json con npm 5+. Tienes que eliminarlo antes de usarlo
npm install --production.fuente
Y, según la pregunta para instalar solo dependencias, el siguiente comando ayudará
fuente