node.js - last - Especifique la ruta a node_modules en package.json
npm last version (4)
¿Hay alguna manera de mover el directorio node_modules en una aplicación para decir / vendor / node_modules como lo hace Bower con el archivo bowerrc? Pensé que podría especificarse en package.json pero parece que no puedo encontrar una solución. Su ayuda es muy apreciada.
En resumen: no es posible y, como parece, nunca será compatible (consulte aquí https://github.com/npm/npm/issues/775 ).
Hay algunos métodos de trabajo extravagantes con el uso de las variables CLI o ENV (ver la respuesta actual seleccionada), .npmrc-Config-Files o
npm link
, lo que todos tienen en común: nunca son solo específicos del proyecto, sino siempre algún tipo de soluciones
global
.
Para mí, ninguna de esas soluciones es realmente limpia porque los contribuyentes a su proyecto siempre necesitan crear una configuración especial o tener algún conocimiento especial: no pueden simplemente
npm install
y funciona.
Entonces: O tendrá que poner su package.json en el mismo directorio donde desea instalar sus node_modules, o vivir con el hecho de que siempre estarán en el directorio raíz de su proyecto.
No estoy seguro de si esto es lo que tenía en mente, pero terminé con esta pregunta porque no pude instalar
node_modules
dentro de mi directorio de proyecto ya que estaba montado en un sistema de archivos que no admitía enlaces simbólicos (una VM "compartida" carpeta).
Encontré la siguiente solución:
-
Copie el archivo
package.json
a una carpeta temporal en un sistema de archivos diferente -
Ejecute
npm install
allí -
Copie el directorio
node_modules
resultante nuevamente en el directorio del proyecto, usandocp -r --dereference
para expandir los enlaces simbólicos en copias.
Espero que esto ayude a alguien que termine con esta pregunta cuando busque una forma de mover
node_modules
a un sistema de archivos diferente.
Otras opciones
Hay otra solución, que
encontré en el problema de github al que @Charminbear se vinculó
, pero esto no funciona con
grunt
porque no admite
NODE_PATH
según
https://github.com/browserify/resolve/issues/136
:
supongamos que tiene
/media/sf_shared
y no puede instalar enlaces simbólicos allí, lo que significa que en realidad no puede instalar npm desde/media/sf_shared/myproject
porque algunos módulos usan enlaces simbólicos.
$ mkdir /home/dan/myproject && cd /home/dan/myproject
$ ln -s /media/sf_shared/myproject/package.json
(puede hacer un enlace simbólico en esta dirección, simplemente no puede crear uno dentro de / media / sf_shared)$ npm install
$ cd /media/sf_shared/myproject
$ NODE_PATH=/home/dan/myproject/node_modules node index.js
Yarn admite esta característica:
# .yarnrc file in project root
--modules-folder /node_modules
Pero su experiencia puede variar según los paquetes que utilice. No estoy seguro de que quieras entrar en esa madriguera de conejos.
sí, puedes configurar la variable de entorno NODE_PATH:
export NODE_PATH=''yourdir''/node_modules
Según el documento:
Si la variable de entorno NODE_PATH se establece en una lista de rutas absolutas delimitadas por dos puntos, el nodo buscará esas rutas en busca de módulos si no se encuentran en otro lugar. (Nota: en Windows, NODE_PATH está delimitado por punto y coma en lugar de dos puntos).
Además, el nodo buscará en las siguientes ubicaciones:
1: $ HOME / .node_modules
2: $ HOME / .node_libraries
3: $ PREFIX / lib / node
Donde $ HOME es el directorio de inicio del usuario y $ PREFIX es el nodo_prefijo configurado de nodo.
Estos son principalmente por razones históricas. Le recomendamos encarecidamente que coloque sus dependencias localmente en las carpetas node_modules. Se cargarán más rápido y de manera más confiable.