npm install no instalará devDependencies

256

En Windows, por alguna razón, cuando lo ejecuto npm installno instalará devDependencies . AFAIK debería. Si ejecuto npm install --dev devDependencies se instalan. No entiendo por qué npm installno instala devDependencies también, sino que solo instala dependencias. ¿Cuál podría ser la razón? ¿Cómo puedo arreglarlo?

Tal vez algo está mal con mi package.json ? Se enumera a continuación si puede ser útil:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}
Tristan Tzara
fuente
55
¿Por qué necesitamos una solución ? ¡Debería ser el predeterminado! devDependenciesson literalmente dependencias para los desarrolladores del módulo . Apuesto a que la mayoría de nosotros tenemos npm installun módulo para usarlo, en lugar de desarrollarlo.
Константин Ван
Supongamos que escribe una aplicación y necesita un registrador o un complemento de paquete web. esos son devdeps. esos necesitan ser instalados. npm no los instala en algunos casos.
Tristan Tzara
1
Quiero decir, la instalación devDependenciessolo es necesaria cuando escribes el paquete (aplicación). Usarlo no requiere el devDependencies. Por lodevDependencies tanto , es razonable requerir que se instalen banderas adicionales. Si se npm installinstala devDependencies por defecto , los usuarios también obtendrían paquetes redundantes.
Константин Ван
el comportamiento documentado es que cuando lo hago npm ien mi carpeta toma py package.jsone instala tanto deps como devdeps. Esta es la forma en que está destinado a funcionar y tiene sentido (por ejemplo, cuando lo hago npm idespués de git cloneque espero tener todo lo que necesito, incluidos, por ejemplo, complementos de paquete web). Esta pregunta aborda un error, cuando el comportamiento real es diferente al previsto. Por favor, eche un vistazo a docs - docs.npmjs.com/cli/install . Hay una bandera para no instalar devdeps, pero el comportamiento predeterminado es instalarlos, lo que tiene mucho sentido y es lo que todos esperan
Tristan Tzara
No veo ninguna razón sensata para recordarme ejecutar otro comando para instalar, por ejemplo, complementos de paquete web o defs de tipo de mecanografía o cualquier otro devdeps cada vez que tire. npm i debería arrancar ambos, que es el comportamiento previsto, sensato y documentado, así que honestamente no entiendo por qué dices que este problema debería ser un estándar
Tristan Tzara

Respuestas:

306

Consulte los documentos de NPM para instalar

Con el --productionindicador (o cuando la variable de entorno NODE_ENV se establece en producción), npm no instalará los módulos enumerados en devDependencies ".

El --only={prod[uction]|dev[elopment]}argumento hará que solo se instalen devDependencies o solo no devDependencies, independientemente de NODE_ENV ".

Has probado

npm install --only=dev

Si le preocupa que su package.json pueda ser incorrecto, lo mejor que puede hacer es esto. Cree una nueva carpeta y ejecute:

npm init --yes

Luego:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

¡Y deberías estar listo para irte! De lo contrario, seguirá publicando otras opciones.

Verifique su configuración de npm:

npm config list

npm obtiene su configuración de la línea de comandos, variables de entorno y archivos npmrc. Así que verifique las variables de entorno y el archivo npmrc .

¿Aún fallando?

Ok, cree una nueva carpeta, idealmente en otro lugar de su sistema de archivos. es decir. no en la misma jerarquía de carpetas. Por ejemplo, C: \ myNewFolder - cuanto más cerca de la base C: maneje mejor.

Entonces corre:

npm init --yes

Ahora ejecuta:

npm install underscore --save

y finalmente:

npm install mocha --save-dev

¿Funciona todo como se esperaba?

Lo que intento hacer es entender si su problema es global o algo local en la carpeta y dependencias anteriores.

arcseldon
fuente
Tristán: ¿ayuda esto a tu situación? ¿Puede marcar la respuesta como correcta o, de lo contrario, hágame saber el resultado de intentar lo anterior?
arcseldon el
2
npm install --only = dev instala devdeps, pero me gustaría instalar tanto deps como devdeps a la vez. package.json parece estar bien, ya que recrearlo no cambia nada. ¿Tengo razón en que NODE_ENV existe tanto globalmente, como valor predeterminado y localmente, como valor para proyecto? ¿Dónde puedo comprobar y cambiar estos valores en las ventanas (que he visto y no tengo ninguna variable de sistema NODE_ENV)
Tristán Tzara
@TristanTzara: actualmente trabajo casi exclusivamente en MAC. Sin embargo, a partir de recuerdos de días pasados ​​(hace años en NT y XP), ¿puede escribir algo como "establecer" en la ventana del símbolo del sistema? De lo contrario, vaya a algo como Propiedades del sistema -> Avanzado -> Variables de entorno y verifique sus entradas allí . Está buscando una "clave" con NODE_ENV. Buscaré en Google ahora una opción de Windows, pero publiqué esto en caso de que ayude
arcseldon el
Enlace aquí - winaero.com/blog/…
arcseldon
@TristanTzara: es bueno saberlo. Un pensamiento, verifique todos los directorios principales sobre su directorio que no funcionan. Busque una carpeta node_modules existente ... npm buscará hacia arriba cuando intente resolver una dependencia y podría ser algo extraño, como recoger un módulo instalado existente más arriba en el árbol de directorios y, por lo tanto, negarse a instalar el suyo en la carpeta secundaria . El lugar habitual está justo debajo de su directorio de inicio. Buena suerte y gracias por reconocer mi respuesta: D
arcseldon
85

Compruebe si el valor de producción de la configuración de npm está establecido en verdadero. Si este valor es verdadero, omitirá las dependencias de desarrollo.

correr npm config get production

Para configurarlo: npm config set -g production false

Shawn Mclean
fuente
Me pregunto si, en algún lugar entre npm 5.xy npm 6.x, si no se configuró ningún valor, ¿el valor predeterminado será en truelugar de false?
James Perih
38

asegúrese de no tener la variable env NODE_ENVconfigurada en 'producción'.

Si lo hace, las dependencias de desarrollo no se instalarán sin la --devbandera

Nir Levy
fuente
He echado un vistazo a las variables de mi sistema e incluso no tengo esta allí. Tal vez miro el lugar equivocado?
Tristan Tzara
13
Tenga en cuenta que npm install --devinstala devDependencies de forma recursiva . Esto casi nunca es lo que quieres y, de hecho, está en desuso .
Wonko
Gracias. No sabía que esto afectaría a las instalaciones regulares de npm, pero es lógico. :)
Lothre1
66
El uso de la --devopción está en desuso. Usar en su --only=devlugar
Sarath Ak
16

Tenía un package-lock.jsonarchivo de una versión anterior de mi package.json, lo eliminé y luego todo se instaló correctamente.


fuente
¡Bingo! Eso resolvió mi problema. Parece que deberíamos haber comprometido esto en el repositorio.
azar el
9

Tuve un problema similar. npm install --only=devno funcionó, y tampoco lo hizo npm rebuild. Finalmente, tuve que eliminar node_modulesy volver a package-lock.jsonejecutar npm install. Eso me lo arregló.

programador obsesivo
fuente
7

Puede usar el camino corto para las dependencias de instalación solo para el desarrollo de la siguiente manera:

npm i -D <dependencies-names>
Cerveza inglesa
fuente
la mejor respuesta. Shpuld estará en la cima
wwwwwwwwwwww
6

Asegúrate de que package.jsonsea ​​válido ...

Tuve el siguiente error ...

npm WARN Invalid name: "blah blah blah"

y eso, de manera similar, hizo que devDependenciesno se instalara.

FYI, cambiando el package.json"nombre" para blah-blah-blaharreglarlo.

Alex Gray
fuente
0

Tengo el mismo problema porque configuré NODE_ENV=productionmientras construía Docker. Luego agrego uno más npm install --only=dev. Todo funciona bien Necesito las devDependencies para construir módulos TypeSciprt

RUN npm install
RUN npm install --only=dev
Phat Tran Ky
fuente