¿Cómo instalo las dependencias package.json en el directorio actual usando npm?

202

Tengo una aplicación web: fooapp . Tengo un package.jsonen la raíz. Quiero instalar todas las dependencias en un específico node_modules directory. ¿Cómo hago esto?

Lo que quiero

Digamos que tengo dos widgetdependencias. Quiero terminar con una estructura de directorios como esta:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Lo que consigo

cuando corro npm install fooapp/ me sale esto:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm hace una copia del directorio de mi aplicación en el directorio node_modules e instala los paquetes dentro de otro directorio node_modules.

Entiendo que esto tiene sentido para instalar un paquete. Pero no require()tengo mi aplicación web dentro de otra cosa, la ejecuto directamente. Estoy buscando una manera simple de instalar mis dependencias en un directorio específico de node_modules.

Daniel Beardsley
fuente

Respuestas:

389

Corriendo:

npm install

desde el directorio de su aplicación (es decir, donde se encuentra package.json) instalará las dependencias para su aplicación, en lugar de instalarla como un módulo, como se describe aquí . Estos se colocarán en ./node_modules en relación con su archivo package.json (en realidad es un poco más complejo que esto, así que consulte los documentos npm aquí ).

Si lo desea, puede mover el directorio node_modules al directorio principal de su aplicación, ya que el mecanismo 'require' del nodo comprende esto. Sin embargo, si desea actualizar las dependencias de su aplicación con install / update, npm no verá los 'node_modules' reubicados y en su lugar creará un nuevo directorio, nuevamente en relación con package.json.

Para evitar esto, solo cree un enlace simbólico a los node_modules reubicados desde el directorio de su aplicación:

ln -s ../node_modules node_modules
ireddick
fuente
¡Fantástico! Lo probaré y marcaré esta respuesta como aceptada si funciona.
Daniel Beardsley
9
A pesar de que es una solución de trabajo, descubrí que npm linkes más conveniente en situaciones en las que necesita tomar módulos de otro directorio (consulte stackoverflow.com/a/14387210/820520 )
melekes
14

En mi caso necesito hacer

sudo npm install  

mi proyecto está dentro de / var / www, así que también necesito establecer los permisos adecuados.

aesede
fuente
15
sudo puede no ser necesario para la instalación de npm.
Allen Koo
2
Dependiendo del usuario que necesite ejecutar el archivo js y las dependencias instaladas, puede ejecutarlo sudo -u [username] npm install. Es mejor simplemente npm instally chownel directorio node_modules de forma recursiva después del hecho.
TheLonelyGhost
55
nunca ejecute npm con sudo a menos que esté usando -g, e incluso entonces hay mejores formas de manejar eso.
tkone
1
Gracias por tu respuesta, pero ¿por qué? ¿puedes explicar? Quiero decir, ¿qué pasa si tengo un proyecto en el que quiero o necesito mantener una carpeta con permisos de root e instalar dependencias sin -g allí? tal vez hay una buena razón, pero sudo npm install (sin -g) varias veces y nunca tuve ningún problema. ¡Salud!
aesede
1
@RredCat Estoy de acuerdo sobre la forma correcta de hacer este tipo de cosas, pero después de un tiempo noté que esta discusión está migrando hacia Ubuntu, parece que hay un problema en la forma en que administra algunos permisos y carpetas, lo que está obligando a los usuarios a usar sudo npm. De nuevo, solo en Ubuntu.
aesede
0

Solo ejecuta

sudo npm i --save

Eso es todo

DECIR AH
fuente