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 .)
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
@ 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
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:
Respostas:
Você pode usar a
--prefix
opção:Os pacotes serão instalados no
./install/here/node_modules
. Amkdir
é necessária uma vez NPM poderiam escolher um já existentenode_modules
diretório mais acima na hierarquia. (Consulte a documentação do npm nas pastas .)fonte
npm install
(sem nome do pacote)? Eu instalei isso diretamente, mas o npm procurapackage.json
no{prefix}
. O que eu também pretendo é poder deixar opackages.json
root no projeto e, ao mesmo tempo, instalar todos os pacotes{project root}/{project webroot}
.npm install
, mas--prefix
parece uma solução melhor, se não estiver causando uma recursão.Na documentação , está indicado: Use a opção prefix junto com a opção global :
(Ênfase por eles)
Portanto, em seu diretório raiz, você pode instalar com
e instalará a
node_modules
pasta na pastafonte
require
instalar pacotes globalmente, pode?A partir da versão 3.8.6 do npm, você pode usar
para instalar no diretório especificado. O NPM cria uma
node_modules
pasta automaticamente, mesmo quando umnode_modules
diretório já existe na hierarquia superior. Você também pode ter umpackage.json
no diretório atual e instalá-lo no diretório especificado usando a--prefix
opção:No npm 6.0.0, você pode usar
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
--prefix
opção Ele é resolvido conforme a documentação do npm em pastas , somente quandonpm install
é usado sem a--prefix
opçãofonte
Can't install <current directory>: Missing package name
package.json
arquivo dentro./install/here
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:
fonte