você pode hospedar um repositório privado para sua organização usar com o npm?

219

O Npm parece uma ótima plataforma para usar em uma organização, curioso para saber se é possível um repo privado, como no Nexus / Maven. Nada aparece no Google :(

Adão
fonte
1
Abaixo está uma documentação bastante clara, como fazer isso: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository É o mesmo que pvorb explicou em sua resposta.
Ramesh.mimit
2
Observe que a postagem do clock.co.uk é uma duplicata completa do registro npm. Para um cache local de suas dependências necessárias, a melhor solução que encontrei é o npm_lazy . O documento no meu garfo pode ser um pouco mais fácil de seguir.
Jake Berger
1
Eu sei que sou um pouco tarde para a discussão, mas eu gostaria apenas para adicionar suporte de registro npm privada que recentemente adicionado em nosso (livre) do produto PROGET
Karl Harnagy
2
Conforme observado abaixo, o Nexus agora suporta repositórios hospedados e de proxy npm.
Zac Thompson
8
Ao longo dos anos, tornaram-se muitas opções disponíveis. Qualquer pessoa a voltar a este deve ler todas as respostas e não apenas o que eu aceito em 2011.
adam

Respostas:

100

Eu não acho que exista uma maneira fácil de fazer isso.

Uma olhada na documentação do npm nos diz que é possível:

Posso executar meu próprio registro particular?

Sim!

A maneira mais fácil é replicar o banco de dados do sofá e usar o mesmo documento de design (ou similar) para implementar as APIs.

Se você configurar a replicação contínua a partir do CouchDB oficial e, em seguida, definir o CouchDB interno como a configuração do registro, poderá ler todos os pacotes publicados, além dos particulares, e por padrão, apenas publicará internamente. Se você deseja publicar um pacote para o mundo inteiro ver, basta substituir a --registryconfiguração desse comando.

Há também um excelente tutorial sobre como criar um repositório npm privado no blog clock.

EDIT (2017-02-26):

Não é realmente novo, mas agora existem planos pagos para hospedar pacotes particulares no NPM.

Ao longo dos anos, o NPM também se tornou um fator para muitas empresas que não são do Node.js., através do imenso ecossistema de front-end construído sobre o NPM. Se sua empresa já estiver executando o Sonatype Nexus para hospedar projetos Java internamente, você também poderá usá-lo para hospedar pacotes NPM internos.

Outras opções incluem o JFrog Artifactory e o Inedo ProGet , mas eu não as usei.

pvorb
fonte
201

https://github.com/isaacs/npmjs.org/ : Na versão npm v1.0.26, você pode especificar URLs de repositórios git privados como uma dependência em seus arquivos package.json. Eu não o usei, mas gostaria de receber feedback. Aqui está o que você precisa fazer:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

O post a seguir fala sobre isso: Debuggable: Private npm modules

ebdr
fonte
3
Esse é um ótimo recurso, mas eu aceitei o pvorb's porque estava perguntando sobre a hospedagem de um repositório inteiro do NPM, como um repositório interno do Maven
adam
2
Nota: No momento, o NPM não suporta a especificação de um intervalo de versões com esses URLs git (por exemplo, 1.2.x ou ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, você pode especificar uma tag (v0.0.1), certo?
Mchado #
Sim, você pode fazer uma tag exata.
argila
Existe uma maneira de usar as chaves de implantação do GitHub para autenticar em repositórios particulares?
sunknudsen 23/01
91

Existe um pacote npm fácil de usar para fazer isso. https://www.npmjs.org/package/sinopia

Em poucas palavras, o Sinopia é um servidor de repositório npm privado / com cache que você pode configurar com configuração zero.

O Sinopia pode ser usado para:

  • publicar pacotes privados próprios sem expô-lo ao público
  • armazenar em cache apenas pacotes públicos usados ​​(não é necessário replicar todo o registro público)
  • substituir pacotes públicos por uma versão modificada que foi produzida internamente.
TiQP
fonte
13
Sinopia parece não ser mais mantida. A última confirmação ocorreu há mais de 8 meses até hoje (7 de março de 2016). Parece ótimo e funciona bem, mas tenha cuidado com a manutenção.
precisa saber é o seguinte
45
Confira verdaccio . É uma bifurcação mantida ativamente: github.com/verdaccio/verdaccio
Rotareti 01/09/16
1
o verdaccio suporta uma configuração "somente privada", na qual não consulta nenhum registro público?
MarkusSchaber
1
@MarkusSchaber Você pode desativar o proxy para outros registros. Ele funciona no modo offline, mesmo que o proxy tente acessar a rede.
Juan Picado
1
Eu realmente acho que Verdaccio merece sua própria resposta hoje stackoverflow.com/a/50815174/336753 Eu nem percebi o comentário aqui primeiro.
kub1x
40

Verdaccio é o que eu estava procurando e merece sua própria resposta;) É um fork do Sinopia mantido ativamente (resposta altamente votada aqui ). É um registro npm como um pacote npm e pode ser encontrado

aqui: https://github.com/verdaccio/verdaccio ,
aqui: https://www.verdaccio.org ,
aqui: pnpm i -g verdaccioou
aqui:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
fonte
2
isto! obrigado -> docker run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@mwm Obrigado. Versão do docker adicionada à lista.
kub1x
28

Em 14 de abril de 2015, foram introduzidos módulos privados npm .

Quando você paga por módulos particulares, pode:

  • Hospede quantos pacotes particulares você desejar
  • Conceda acesso de leitura ou acesso de leitura e gravação desses pacotes a qualquer outro usuário pago
  • Instale e use quaisquer pacotes aos quais outros usuários pagos tenham acesso de leitura a
  • Colabore em todos os pacotes aos quais outros usuários pagos lhe deram acesso de gravação

Claro que não é gratuito - atualmente US $ 7 por mês, por usuário.

E ainda é um serviço bem novo. Por exemplo, falta suporte para contas da organização (em junho de 2015):

Atualmente, os pacotes privados estão disponíveis apenas para usuários individuais, mas o suporte para contas da organização está disponível em breve. Enquanto isso, crie um usuário para sua organização e podemos atualizá-lo para uma organização quando houver suporte aqui.

Portanto, embora não seja perfeita, é a solução oficial do npm para manter pacotes privados, e isso por si só vale a pena mencionar.

ATUALIZAR

Agora, os pacotes privados Npm estão disponíveis, com planos para usuários e organizações individuais :

  • Número ilimitado de pacotes públicos e privados
  • US $ 7 / mês / desenvolvedor
  • Inclui um nome de escopo, com base no nome da organização
  • Publicar e controlar o acesso a @ org-name / foo

(aviso de isenção de responsabilidade: nem mesmo remotamente afiliado à npm, Inc. )

bardzusny
fonte
20

Gerentes de repositório com suporte para registros npm privados:

Abel Pastur
fonte
4
Somente as versões pagas suportam repositórios npm; as versões gratuitas não.
Boon
12
De fato, a versão gratuita do Sonatype Nexus 3.0 suporta repositórios npm (junto com repositórios bower e docker).
N8n8baby
10

Eu acho que esse tópico precisa de uma atualização. Se você olhar para qualquer um dos registros npm disponíveis, eles são extremamente pesados ​​e precisam do couchdb. Gemfurry e outros precisam de você em reuniões públicas. Alguns dos npm's como shadow-npm não têm confirmações recentes .

Então, encontramos Reggie . Possui uma boa atividade de consolidação, extremamente fácil de instalar e usar e possui um bom suporte da comunidade . É extremamente leve e você não precisa lidar com o couchdb, etc.

Pradeep Mahdevu
fonte
9

Perdoe-me se não entender bem sua pergunta, mas aqui está a minha resposta:

Você pode criar um módulo npm privado e usar os comandos normais do npm para instalá-lo. A maioria dos usuários do node.js. usa o git como seu repositório, mas você pode usar o que funcionar melhor para você.

  1. No seu projeto, você desejará o esqueleto de um pacote NPM. A maioria dos módulos de nó possui repositórios git, onde você pode ver como eles se integram ao NPM (o arquivo package.json, acredito que faz parte disso, e o site do NPM mostra como criar um pacote npm)
  2. Use algo parecido com o Make para tornar o pacote disponível e disponível na Internet ou na sua rede para prepará-lo para downloads de instalação do npm.
  3. Depois que seu pacote for feito, use

    npm install * tarball_url *

EhevuTov
fonte
5
Você não recebeu a pergunta dele, mas a resposta é muito útil para mim! :)
Eduardo Costa
7

Esta é a maneira mais fácil que eu conheço - hospede-a na nuvem com o Gemfury registro npm privado.

É gratuito e você pode fazer login com sua conta do Github. Isso poupa muito tempo, comparado à configuração de seu próprio banco de dados.

alex urdea
fonte
não é de graça.
precisa saber é o seguinte
6

estamos usando o Sonatype Nexus, a versão é o Nexus Repository ManagerOSS 3.6.1-02. E tenho certeza de que ele suporta o repositório privado do NPM e armazenou em cache o pacote.

insira a descrição da imagem aqui

Xin Meng
fonte
5

Um pouco atrasado para a festa, mas o NodeJS (a partir de 14 de novembro, eu acho) suporta repositórios corporativos do NPM - você pode descobrir mais em seu site oficial .

De uma olhada superficial, parece que o npmE permite o espelhamento de fall-through do repositório NPM - ou seja, ele procurará pacotes no repositório NPM real, se não conseguir encontrar um no seu interno. Parece muito útil!

O npm Enterprise é uma solução local para compartilhar e distribuir com segurança módulos JavaScript em sua organização, da equipe que mantém o npm e o registro público do npm. Ele foi projetado para equipes que precisam de:

compartilhamento interno fácil de módulos privados melhor controle do fluxo de trabalho de desenvolvimento e implantação, segurança mais rígida em torno da implantação de módulos de código-fonte aberto em conformidade com os requisitos legais para hospedar códigos locais npmE é npm privado

O npmE é um registro do npm que funciona com o mesmo cliente npm padrão que você já usa, mas fornece os recursos necessários para organizações maiores que agora adotam o nó com entusiasmo. Ele foi desenvolvido pela npm, Inc., patrocinadora do projeto de código-fonte aberto da npm e host do registro público da npm.

Infelizmente, não é grátis. Você pode fazer um teste, mas é um software comercial. Este não é o melhor para desenvolvedores solo, mas se você é um desenvolvedor solo, tem o GitHub :-)

Dan Pantry
fonte
3

Este post fala sobre como configurar um registro privado

  • verifique se o couchdb está instalado no seu sistema
  • Replicar npmjs.org use o seguinte comando

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

Observe que existe "continuous":trueno comando, isso utiliza a API _changes do CouchDB e puxa novas alterações quando essa API é notificada.

Se você quiser interromper essas replicações, poderá adicioná-las facilmente "cancel":true. Então o script seria

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

Então vá para npmjs.org readme para instalar NPM (certifique-se nodejse gitestá instalado). Golpe é todos os passos

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 
nickleefly
fonte
1
Infelizmente, o URL isaacs.iriscouch.com/registry está morto agora. Eu tentei mudar para skimdb.npmjs.com/registry , que parece funcionar no início, mas ele está replicando apenas o índice de registro e não os tarballs ...
fuzzyTew
Os couchapp estados leia-me que couchapp está agora meio obsoleto, mas também diz que o atual modo a espelhar todo o registro é usar NPM-fullfat-registro
fuzzyTew
Acabei usando o registro estático para isso, que, diferentemente das soluções couchdb, não requer nenhuma configuração.
precisa saber é o seguinte