Como instalo dependências package.json no diretório atual usando o npm

202

Eu tenho um aplicativo da web: fooapp . Eu tenho um package.jsonna raiz. Eu quero instalar todas as dependências em um específico node_modules directory. Como eu faço isso?

O que eu quero

Digamos que eu tenho duas widgetdependências. Eu quero terminar com uma estrutura de diretório como esta:

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

O que eu ganho

quando corro npm install fooapp/ , recebo o seguinte:

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

O npm faz uma cópia do meu diretório de aplicativos no diretório node_modules e instala os pacotes dentro de outro diretório node_modules.

Entendo que isso faz sentido para instalar um pacote. Mas eu não uso require()meu aplicativo da Web em outra coisa, eu o executo diretamente. Estou procurando uma maneira simples de instalar minhas dependências em um diretório node_modules específico.

Daniel Beardsley
fonte

Respostas:

389

Corrida:

npm install

de dentro do diretório do aplicativo (ou seja, onde o package.json está localizado) instalará as dependências do aplicativo, em vez de instalá-lo como um módulo, conforme descrito aqui . Eles serão colocados em ./node_modules em relação ao seu arquivo package.json (na verdade, é um pouco mais complexo que isso, portanto verifique os documentos do npm aqui ).

Você pode mover o diretório node_modules para o diretório pai do seu aplicativo, se desejar, porque o mecanismo 'require' do nó entende isso. No entanto, se você deseja atualizar as dependências do seu aplicativo com install / update, o npm não verá os 'node_modules' realocados e, em vez disso, criará um novo diretório, novamente em relação ao package.json.

Para evitar isso, basta criar um link simbólico para o node_modules realocado do diretório do seu aplicativo:

ln -s ../node_modules node_modules
ireddick
fonte
Fantástico! Vou tentar e marcar esta resposta como aceita, se funcionar.
Daniel Beardsley
9
Apesar de que é uma solução de trabalho, descobri que npm linké mais conveniente em tais situações onde você precisa de módulos de apoio de outro diretório (veja stackoverflow.com/a/14387210/820520 )
Melekes
14

No meu caso eu preciso fazer

sudo npm install  

meu projeto está dentro de / var / www, então também preciso definir permissões apropriadas.

aesede
fonte
15
sudo pode não ser necessário para a instalação do npm.
Allen Koo
2
Dependendo do usuário que precisa executar o arquivo js e as dependências instaladas, você pode executar sudo -u [username] npm install. Melhor apenas npm installe chowno diretório node_modules recursivamente após o fato.
TheLonelyGhost
5
nunca execute o npm com o sudo, a menos que esteja usando -g- e mesmo assim existem maneiras melhores de lidar com isso.
tkone
1
Obrigado pela resposta, mas por que isso? você pode explicar? Quero dizer, e se eu tiver um projeto no qual deseje ou precise manter uma pasta com permissões de root e instalar dependências sem -g lá? talvez haja uma boa razão, mas eu instalei o sudo npm (sem -g) algumas vezes e nunca tive nenhum problema. Felicidades!
aesede
1
@RredCat Concordo sobre a maneira correta de fazer esse tipo de coisa, mas depois de um tempo percebi que essa discussão está migrando para o Ubuntu, parece que há um problema na maneira como gerencia algumas permissões e pastas, o que está forçando os usuários a usar sudo npm. Mais uma vez, apenas no Ubuntu.
precisa saber é
0

Apenas execute

sudo npm i --save

Isso é tudo

HA
fonte