Como instalar o npm em um diretório especificado?


Respostas:


325

Você pode usar a --prefixopção:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

Os pacotes serão instalados no ./install/here/node_modules. A mkdiré necessária uma vez NPM poderiam escolher um já existente node_modulesdiretório mais acima na hierarquia. (Consulte a documentação do npm nas pastas .)


65
Parece que você precisa ter o arquivo package.json nesse diretório alternativo se você usar a opção --prefix. Existe uma maneira de instalar o package.json no diretório atual e instalar no diretório alternativo?

2
@fractal Veja a minha resposta para isso
yunzen

10
@coundy Existe uma maneira de especificar o caminho para npm install(sem nome do pacote)? Eu instalei isso diretamente, mas o npm procura package.jsonno {prefix}. O que eu também pretendo é poder deixar o packages.jsonroot no projeto e, ao mesmo tempo, instalar todos os pacotes {project root}/{project webroot}.
Automatix

Corri para um problema de recursão. Existe uma maneira de dizer para executar uma vez? Eu o resolvi temporariamente alterando o diretório e depois ligando npm install, mas --prefixparece uma solução melhor, se não estiver causando uma recursão.
precisa saber é

47

Na documentação , está indicado: Use a opção prefix junto com a opção global :

A configuração do prefixo é padronizada para o local em que o nó está instalado. Na maioria dos sistemas, é / usr / local . No Windows, esse é o local exato do binário node.exe. Nos sistemas Unix, é um nível superior, pois o nó geralmente é instalado em {prefix} / bin / node, em vez de {prefix} /node.exe .

Quando o sinalizador global é definido, o npm instala coisas nesse prefixo. Quando não está definido, ele usa a raiz do pacote atual ou o diretório de trabalho atual, se ainda não estiver em um pacote.

(Ênfase por eles)

Portanto, em seu diretório raiz, você pode instalar com

npm install --prefix <path/to/prefix_folder> -g

e instalará a node_modulespasta na pasta

<path/to/prefix_folder>/lib/node_modules

2
Você não pode requireinstalar pacotes globalmente, pode?
Pavlo


1
Você deve adicionar isso à resposta.
Pavlo

6
@ Pavlo Acho que não. Não é a resposta para o OP.
yunzen

@ Pavlo Se um pacote estiver instalado globalmente, você o precisará da mesma maneira que sempre. Portanto, sim, você pode exigir um pacote que esteja instalado globalmente.
Rob Evans

43

A partir da versão 3.8.6 do npm, você pode usar

npm install --prefix ./install/here <package>

para instalar no diretório especificado. O NPM cria uma node_modulespasta automaticamente, mesmo quando um node_modulesdiretório já existe na hierarquia superior. Você também pode ter um package.jsonno diretório atual e instalá-lo no diretório especificado usando a --prefixopção:

npm install --prefix ./install/here

No npm 6.0.0, você pode usar

npm install --prefix ./install/here ./

para instalar o package.json no diretório atual no diretório "./install/here". Há uma coisa que eu notei no Mac: ele cria um link simbólico para a pasta pai dentro do diretório node_modules. Mas ainda funciona.

NOTA: O NPM respeita o caminho que você especificou através da --prefixopção Ele é resolvido conforme a documentação do npm em pastas , somente quando npm installé usado sem a --prefixopção


1
Isso parece não funcionar, eu sempre entendoCan't install <current directory>: Missing package name
Tibor Blenessy

1
@TiborBlenessy Supondo que você esteja falando sobre a segunda declaração de instalação. Verifique se você possui um arquivo package.json válido em seu diretório atual. Se ainda assim não funcionar, deixe-me saber sua versão do npm. Essas etapas costumavam trabalhar com a versão npm especificada. E, se eles não o fizerem mais, eu adoraria mergulhar fundo e chegar à causa raiz e talvez eu possa encontrar uma alternativa.
Rohit Sharma

1
@RohitSharma Usando o npm 6.0.0, esse método não funciona, pois espera o package.jsonarquivo dentro./install/here
Christian Ivicevic

@ChristianIvicevic Você pode usar o npm install --prefix ./install/here ./ para instalar o package.json no diretório atual para o diretório "./install/here". Há uma coisa que eu notei no Mac: ele cria um link simbólico para a pasta pai dentro do diretório node_modules. Mas ainda funciona com o npm 6.0.0
Rohit Sharma

1
@Tanoro O terceiro comando funcionará com o npm 6.0.0 com a criação de links simbólicos, conforme mencionado na resposta. Eu nunca tentei os 2 primeiros comandos com o npm v3.5.2, e é por isso que mencionei a versão específica do npm com a qual eu tentei. Por favor, sinta-se livre para atualizar a resposta com os comandos de trabalho para outras versões também.
Rohit Sharma

0

Estou usando um build do PowerShell e não consegui executar o npm sem alterar o diretório atual.

Terminou usando o comando start e apenas especificando o diretório de trabalho:

start "npm" -ArgumentList "install --warn" -wo $buildFolder
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.