Aqui está o meu problema. Temos um registro NPM privado que funciona apenas em VPN. Gostaria de ter um registro de fallback https://registry.npmjs.org para que, quando eu estiver sem VPN, ele funcione perfeitamente.
PS Atualmente, estou usando o npmrc, que faz um bom trabalho ao alternar entre arquivos .npmrc como solução alternativa.
Respostas:
Você pode ter vários registros para pacotes com escopo definido no seu
.npmrc
arquivo. Por exemplo:Os pacotes no
@polymer
escopo serão recebidos em https://registry.npmjs.org , mas o restante será recebido do seu NPM local.fonte
Na versão 4.4.1, se você pode alterar o nome do pacote, use:
Onde
@myco
está o escopo do seu pacote.Você pode instalar o pacote desta maneira:
Para mais informações: https://docs.npmjs.com/misc/scope
fonte
Invalid package name "@npmjs/": name can only contain URL-friendly characters
quando corronpm i
Para quem procura também uma solução para autenticação, eu adicionaria à solução de pacotes com escopo definido que você pode ter várias linhas em seu
.npmrc
arquivo:Cada linha representa um registro NPM diferente
fonte
npm login --registry=npm.example.com
. Ele armazenará as credenciais de login (authTokens) no arquivo .npmrc na sua pasta de usuário, para que você não precise tê-lo no código-fonte ( docs.npmjs.com/cli/adduser )registry.npmjs.org
, isso funcionou para mimNão é a melhor maneira, mas se você estiver usando mac ou linux, mesmo no Windows, poderá definir alias para diferentes registros.
fonte
alias npm-sin=npm --registry https://localhost:4873/
Como já faz alguns anos e não parece possível fazer isso (usando apenas o npm), uma solução para esse problema é usar o Nexus Repository Manager (da Sonatype). O Nexus suporta vários repositórios, permite solicitá-los e também proxies / caches para melhorar a velocidade.
Existe uma versão gratuita e uma versão pro / paga. O recurso que suporta isso está descrito em: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries
As informações relevantes são duplicadas abaixo; portanto, se / quando o URL / link acima parar de funcionar, as informações ainda estarão aqui.
Permite criar registros privados da NPM
E
Portanto, uma rápida lista com marcadores do que você faz para que isso funcione é:
Instale o Nexus
Crie um repositório local / privado (ou aponte para seu repositório particular em outro servidor)
Crie um GRUPO que liste seu repositório particular e o repositório público.
Configure o seu arquivo $ HOME / .npmrc para apontar para o "GRUPO" recém-criado.
Publique seus pacotes npm privados no repositório local.
Os usuários agora podem executar uma configuração única.
npm config set registry https://nexus/content/groups/GROUP
npm install
.npm install my-private-package npm install lodash any-other-public-package
E seus pacotes públicos e privados podem ser instalados através de um
npm install
comando simples . O Nexus encontra o pacote pesquisando cada repositório configurado no grupo e retorna os resultados. Portanto, o npm ainda acha que existe apenas um registro, mas atrás da cortina existem vários repositórios sendo usados.NOTA IMPORTANTE: Ao publicar seus componentes, você precisará especificar o
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
comando para que seu pacote seja publicado no repositório correto.fonte
npm-private
vez denpm-group
), você pode substituir aregistry
tecla-nopackage.json
do seu projeto (vejahttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
para detalhes). Usandonpm config set registry <url>
você pode configurá-lo comonpm-group
, por exemplo , o que contémnpm-registry
(repositório de encaminhamento) enpm-private
(seu próprio repositório). Eu usei essa solução, porque obter artefatos do GitLab CE local era muito complicado.Você pode usar a sintaxe de vários repositórios para a
registry
entrada no seu.npmrc
arquivo:Isso faria o seu npm procurar pacotes em diferentes servidores.
fonte
serverA
,serverB
eserverC
exemplo repositórios são todos da nossa rede interna, não vai funcionar para você. Não sei se é adequado para você, mas, se achar que pode, tente implantar um Nexus Repository Manager para os repositórios internos.Alguns passos que você pode tentar. (é como fazemos no meu local de trabalho)
Espero que ajude.
fonte
Eu uso as ferramentas CLI do Strongloop para isso; consulte https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ para obter mais informações
Alternar entre repositórios é tão fácil quanto:
slc registry use <name>
fonte
Encontro o mesmo problema quando minha empresa configurou seu próprio registro, por isso refiz muito o proxy-registro em proxy-multi-registros para resolver esse problema. Espero que também ajude você.
fonte
A partir de 13 de abril de 2020, não existe essa funcionalidade, a menos que você possa usar escopos diferentes, mas você pode usar o script pós-instalação como solução alternativa. É sempre executado, bem , após cada instalação do npm :
Digamos que você tenha o .npmrc configurado para instalar o @ foo-org / foo-pack-private a partir do seu repositório particular do github, mas o pacote público @ foo-org / foo-pack-public está no npm (sob o mesmo escopo: foo- org ).
Sua pós-instalação pode ficar assim:
Não se esqueça de remover @ foo-pack / foo-org da matriz de dependências para garantir que a instalação do npm não tente obtê-la no github e para adicionar o sinalizador --dry-run que garante package.json e package- O lock.json permanece inalterado após a instalação do npm .
fonte
Minha abordagem foi criar uma ligeira variante de linha de comando que adiciona a opção de registro.
Criei esses arquivos na pasta nodejs, onde o executável npm é encontrado:
npm-.cmd
:npm-
:Agora, se eu quiser fazer uma operação no registro npm normal (enquanto não estiver conectado à VPN), digite apenas
npm-
onde normalmente digitarianpm
.Para testar este comando e ver o registro de um pacote, use este exemplo:
PS. Estou no windows e testei isso no Bash, CMD e Powershell. eu também
fonte