dev commands module npm dependencies package dependency-management

module - commands - ¿Cómo puedo forzar a npm 3 a instalar dependencias anidadas?



npm versions (3)

Acabo de actualizar a la versión npm 3 y noté que uno de los cambios más grandes que hizo es que impone un árbol de dependencia plano .

Sus dependencias ahora se instalarán maximamente planas. En la medida de lo posible, todas sus dependencias, y sus dependencias, y las dependencias de THEIR se instalarán en la carpeta node_modules su proyecto sin anidar. Solo verá módulos anidados uno debajo del otro cuando dos (o más) módulos tengan dependencias en conflicto.

Entonces, por ejemplo, si el paquete A depende del paquete B , cuando npm install A obtendrá esta estructura de archivos:

--- root/ |--- node_modules/ |--- A/ |--- B/

En lugar de la estructura de archivos anterior de la versión 2 o inferior:

--- root/ |--- node_modules/ |--- A/ |--- node_modules/ |--- B/

El primer problema (y estoy seguro que no el último) que encontré fue el siguiente:

El paquete A no es consciente del comportamiento de npm v3 y depende del paquete B. Pero A asume la estructura de archivos antigua (v2) porque tiene node_modules/B en su código, en lugar de la adecuada ../node_modules/B . Ahora el código de A no se compilará porque está buscando B/ en el directorio incorrecto.

Si no tengo ganas de molestar al desarrollador para que arregle el código y esté esperando una actualización de A , me pregunto si hay alguna manera de configurar una opción que obligue a npm a instalar las dependencias de A dentro de su propia carpeta node_modules , el de la misma manera npm v2 lo hubiera hecho.


¿Has probado --legacy-bundling npm install for npm install ?

https://docs.npmjs.com/cli/install

El argumento --legacy-bundling hará que npm instale el paquete, de modo que las versiones de npm anteriores a 1.4, como la que se incluye con el nodo 0.8, pueden instalar el paquete. Esto elimina todo deduplicado automático.


Acabo de encontrar este problema y encontré una alternativa para solucionar este problema. Dado que Node.js viene con NPM, la única forma que se me ocurrió fue cambiar a la versión Node.js 0.10, que viene con una versión anterior en NPM, que instalará las dependencias a la manera antigua. Para bajar de categoría utilicé NVM y ejecuté nvm use 0.10.0 . Puede alternar entre las versiones de npm siguiendo este truco. ¡Espero eso ayude!


Esto es lo que pasa cuando no duermo lo suficiente. La solución obvia de alguna manera se me escapó.

$ cd node_modules/A/ $ npm install $ cd ../../