Me encontré con un problema curioso: aparentemente, algunos módulos de Node.js tienen jerarquías de carpetas tan profundas que el comando de copia de Windows (o el de PowerShell, Copy-Itemque es lo que realmente estamos usando) llega al infame error de "ruta demasiado larga" cuando la ruta es superior a 250 caracteres de largo.
Por ejemplo, esta es una jerarquía de carpetas que puede crear un solo módulo de nodo:
node_modules\nodemailer\node_modules\simplesmtp\node_modules\
xoauth2\node_modules\request\node_modules\form-data\node_modules\
combined-stream\node_modules\delayed-stream\...
Parece una locura pero es una realidad con los módulos de Node.
Necesitamos usar copiar y pegar durante la implementación (no estamos usando una plataforma de destino "inteligente" como Heroku donde la implementación de Git sería una opción) y esta es una limitación seria en Windows.
¿No hay un comando npm o algo que compacte la node_modulescarpeta o tal vez incluya solo lo que realmente es necesario en tiempo de ejecución? (Los módulos de nodo generalmente contienen testcarpetas, etc. que no necesitamos implementar). ¿Alguna otra idea de cómo solucionarlo? Desafortunadamente, no usar Windows no es una opción :)

package.jsoncondependencies? Si es así, ¿podría copiar sinnode_modulesy usar npm toinstalloupdatelas dependencias?npm installen el entorno de destino, funciona creando un "paquete de implementación" localmente (básicamente un ZIP más algunos metadatos) que luego se carga en la máquina de destino, se extrae allí y listo. Entonces necesito incluirnode_modulesdirectamente.Respuestas:
npm v3 (lanzado recientemente) resuelve este problema nivelando las dependencias. Consulte las notas de la versión aquí en https://github.com/npm/npm/releases/tag/v3.0.0 en la
flat flatsección.Y el último comentario sobre este tema https://github.com/npm/npm/issues/3697
fuente
flat flatahora están enterradas en otra página. Aquí hay un enlace directo: github.com/npm/npm/releases/tag/v3.0.0solo para agregar a esto ... otra cosa que me ayudó fue enumerar todos los módulos instalados con
npm ls.lo que le dará un árbol de módulos y versiones ... a partir de ahí es bastante fácil identificar cuáles son duplicados ...
npm dedupeno hizo nada por mí. No estoy seguro si eso es un error o qué (Nodo v 10.16)Entonces, una vez que identifique un módulo duplicado, instálelo en el directorio raíz node_module usando
npm install [email protected] --save-dev. La versión es importante.después de eso, borré mi directorio node_modules e hice un nuevo
npm install.Version corta
npm lspara obtener una lista de todos los módulos instalados.npm install module@version --save-devpara instalar esos módulos en el directorio raíz node_modules y actualizar package.json.rmdir node_modulespara eliminar el directorio node_modules.npm installpara extraer una copia nueva de sus dependencias.Una vez que hice eso, todo quedó mucho más limpio.
También recomiendo comentar su archivo package.json para mostrar cuáles fueron eliminados para aplanar el árbol node_modules.
fuente
No creo que haya ninguna gran solución dadas sus limitaciones, pero aquí hay algunas cosas que pueden ayudar.
npm dedupepara optimizar la jerarquía de su directorio, lo que puede acortar algunas rutasnpm install --productionpara instalar sin las herramientas de desarrollonode_modulesdirectorio más alto debajoyour_project/node_modules/pkg_with_deep_depsque les permitirá tener rutas lo suficientemente cortas pero aún funcionar. Entonces esto seríayour_project/node_modules/pkg_with_deep_deps/node_modules.requiredebería poder encontrarlos correctamente en tiempo de ejecución. Solo necesitará documentar claramente lo que ha cambiado manualmente, por qué lo ha hecho y mantener sus propias dependencias reales representadas con precisión enpackage.jsonAquí hay una discusión sobre el tema de github que elabora este problema en detalle.
fuente
dedupe(no sabía nada) y--production(npm install -hno mostró esta opción)! Desafortunadamente, usar un archivo ZIP no es una opción, vea un comentario arriba.Escribí un módulo de nodo llamado "npm-flatten" que aplana sus dependencias aquí: https://www.npmjs.org/package/npm-flatten
Si está buscando una distribución, también escribí un paquete NuGet que integrará un entorno node.js completo con su proyecto .NET aquí: http://www.nuget.org/packages/NodeEnv/
Sus comentarios serán bienvenidos.
fuente
Algo que me ayudó fue asignar una unidad local a mi carpeta Node.js:
uso neto n: \ computername \ c $ \ users \ myname \ documents \ node.js / persistent: sí
Antes: c: \ users \ myname \ documents \ node.js \ projectname (45 caracteres) Después: n: \ projectname (14 caracteres que son 31 caracteres menos)
En muchos casos esto permitió instalar algunos módulos.
Diré que acabo de redescubrir este problema hoy cuando intentaba hacer una copia de seguridad de todo mi código en una unidad USB.
"C: \ Users \ myname \ Documents \ Node.js \ angular-phonecat \ node_modules \ karma \ node_modules \ chokidar \ node_modules \ anymatch \ node_modules \ micromatch \ node_modules \ regex-cache \ node_modules \ benchmarked \ node_modules \ file-reader \ node_modules \ extend-shallow \ benchmark \ fixtures es demasiado largo ".
Incluso cuando traté de hacer una copia de seguridad con la letra de unidad N: todavía fallaba en algunos casos debido a la longitud de la ruta, pero fue suficiente para arreglar el anterior.
fuente
1) Durante la compilación de la versión, puede evitar que Visual Studio escanee estos archivos / carpetas configurando las propiedades de la carpeta como una carpeta oculta (SOLO configúrelo en node_modules). Referencia: http://issues.umbraco.org/issue/U4-6219#comment=67-19103
2) Puede excluir archivos o carpetas que se publican durante el empaquetado al incluir el siguiente nodo XML en el archivo CsProject.
fuente
He encontrado una solución a partir de Microsoft Node.js Directrices .
> npm install -g rimrafeliminar archivos que excedanmax_path> npm dedupemueve paquetes duplicados al nivel superior> npm install -g flatten-packagesmueve todos los paquetes al nivel superior, pero puede causar problemas de versionesnpm@3que se intenta hacer elnode_modulesjerarquía de carpetas sea máximamente plana.> npm install –g npm-windows-upgradefuente
Esta no es una solución adecuada, sino más bien una solución cuando tiene prisa, pero puede usar 7-Zip para comprimir su carpeta, mover el archivo comprimido y descomprimirlo sin ningún problema.
Usamos esa solución para implementar una aplicación Node.js donde no era posible hacer una instalación npm limpia.
fuente