Como instalar um módulo NPM privado sem meu próprio registro?

329

Peguei um código compartilhado e o coloquei em um módulo NPM, um que não quero carregar no registro central. A questão é: como instalá-lo de outros projetos?

A maneira óbvia é provavelmente configurar meu próprio registro do NPM, mas, de acordo com a documentação, isso envolve muitos problemas.

Posso apenas instalar um módulo NPM que fica no sistema de arquivos local, ou talvez até no git?

npm install --from-git git@server:project
futlib
fonte

Respostas:

263
cd somedir
npm install .

ou

npm install path/to/somedir

somedirdeve conter o package.jsoninterior.

Também conhece o git:

npm install git://github.com/visionmedia/express.git
mihai
fonte
4
A solução path / to / somedir meio que funciona, mas é meio horrível, porque todas as declarações de necessidade precisam incluir esse caminho relativo ou absoluto. Por favor me corrija se eu estou fazendo algo errado ...
Luke Bayes
3
@ Lucas sim, você está errado. Depois que npm installtodos os arquivos são copiados para o diretório do projeto. Portanto, os caminhos nas requireinstruções serão relativos apenas ao diretório do seu projeto.
amigos estão
4
Estou confuso com a parte superior e a única razão de eu não ter testado isso pessoalmente é que ainda estou aprendendo e não tenho um módulo privado para trabalhar. Enfim, alterando seu diretório para onde o módulo está e, em seguida, chamando, installisso não seria instalado apenas e não para o projeto para o qual você deseja usá-lo?
Adam Beck
11
Nota lateral: (a) ao usar repositórios git, você pode especificar um branch / commit / tag adicionando #<ref>a ao final do URL do git, por exemplo git://github.com/visionmedia/express.git#v0.0.1; (b) Para ser seguro, adicione "private": trueao package.json de seus repositórios particulares. Isso garantirá que o npm nunca permita que você publique acidentalmente seu molho secreto no registro oficial do npm. (de acordo com debuggable.com/posts/… )
Rafael Xavier
9
FYI se você está servindo o seu git-se via http você precisa npm i git+http://all/the/things.gitmesmo que git clone http://all/the/things.gitfunciona muito bem
SLF
527

Nos seus módulos npm privados, adicione

"private": true 

para o seu package.json

Em seguida, para referenciar o módulo privado em outro módulo, use isso no seu package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
250R
fonte
59
Esta é a resposta realmente correta se você quiser que o package.json mantenha a lista de dependências de repositório particular, que é uma coisa boa que você deve fazer.
6
No exemplo, está fazendo referência a uma tag específica, mas se você não tiver uma, ela será padronizada como master. (consulte git-scm.com/book/en/Git-Basics-Tagging )
250R
4
Eu não entendo como essa linha de comando pode baixar código de um repositório particular do github se eu não estiver fornecendo minhas credenciais! Então, como posso passar minhas credenciais no github?
Renato Gama
28
Observe que a "private": truepeça não é necessária, mas ajudará a impedir que seu repositório particular seja acidentalmente publicado no registro público do npm.
precisa saber é o seguinte
2
O npm também procura várias variáveis ​​de ambiente. A partir do manual na npm install <git remote url>seção, há opções como GIT_ASKPASSeGIT_SSH exemplo de uso .Um para escolher uma outra tecla que o id_rsa padrão:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
Jasmine Hegman
62

Posso apenas instalar um pacote NPM que fica no sistema de arquivos local, ou talvez até no git?

Sim você pode! Nos documentos https://docs.npmjs.com/cli/install

Um pacote é:

  • a) uma pasta contendo um programa descrito por um arquivo package.json
  • b) um tarball compactado com gzip contendo (a)
  • c) um URL que resolva para (b)
  • d) a <name>@<version> publicado no registro com (c)
  • e) a <name>@<tag> que aponta para (d)
  • f) a <name> que tenha uma etiqueta "mais recente" satisfazendo (e)
  • g) a <git remote url> que resolva para (b)

Npm não é brilhante?

Coronel Panic
fonte
2
Observe que se você optar pela opção b), na verdade, ela deve ser um tarball compactado com gzip , um mero arquivo zip não fará isso. Ou seja, se você criar seu pacote tar -czf my-package.tar.gz dist(supondo que sua distpasta também tenha um package.jsonarquivo adequado ), será possível npm install ../my-lib/my-package.tar.gzem seu outro projeto.
Dániel Kis-Nagy
48

Atualização de janeiro de 2016

Além de outras respostas , às vezes há o cenário em que você deseja ter módulos privados disponíveis em um contexto de equipe.

O Github e o Bitbucket suportam o conceito de gerar uma chave de API de equipe . Essa chave de API pode ser usada como a senha para executar solicitações de API como essa equipe.

Nos seus módulos npm privados, adicione

"private": true 

para o seu package.json

Em seguida, para referenciar o módulo privado em outro módulo, use isso no seu package.json

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

onde team name = myteamname , e API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Aqui, faço referência a um repositório de bitbucket, mas é quase idêntico usando o github também.

Finalmente, como alternativa, se você realmente não se importa em pagar US $ 7 por mês (no momento da redação), agora pode ter módulos privados do NPM prontos para uso.

arcseldon
fonte
Você pode usar isso se quiser ter um módulo global?
PI.
Isso não funciona para mim, eu tenho medo. O remoto e o repositório não foram encontrados. Alguma ideia?
Thomas Bormans 03/02
@ThomasBormans - ainda está tendo problemas? Por favor, cole (embaralhe sua chave teamname / api) o que você tem como linha na seção de dependências do package.json - conforme as instruções acima. Descobri que isso funciona bem para repositórios particulares do github e do bitbucket. Qual você está usando?
Arcseldon
@arcseldon "name": "git + key: [email protected]/user/repo.git " retorna EISDIR: operação ilegal em um diretório, leia . E "name": "git + user: [email protected]/repo.git " retorna vários erros, incluindo estas palavras remote: Not Found, fatal: repository, Command failed: git clone . Alguma ideia?
Thomas Bormans 03/02
Tente seguir o formato "exato" que eu dei na resposta: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git Como você gerou a chave da API? está correto nas configurações do bitbucket ... desculpe-me por perguntar o óbvio, mas tenho quase 100% de confiança que isso deve funcionar.
arcseldon
30

FWIW: Eu tive problemas com todas essas respostas ao lidar com um repositório de organização privada.

O seguinte funcionou para mim:

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Por exemplo:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

Não sei ao certo por que as outras respostas não funcionaram para mim neste caso, porque foram as que tentei primeiro antes de acessar o Google e encontrar essa resposta. E as outras respostas são o que eu fiz no passado.

Espero que isso ajude outra pessoa.

Ben Lesh
fonte
2
Você pode usar uma subpasta do repositório git?
10284 Chris
Trabalhou para mim em 2019! Mas eu tinha que garantir que o git tivesse credenciais para acessar essa conta. (Por exemplo clone teste git duas vezes com https://, e assegurar a senha não é necessária na segunda corrida Então você é bom para ir.!)
joeytwiddle
9

Eu tive esse mesmo problema e, depois de algumas pesquisas, encontrei o Reggie ( https://github.com/mbrevoort/node-reggie ). Parece bastante sólido. Permite a publicação leve de módulos NPM em servidores privados. Não é perfeito (sem autenticação na instalação), e ainda é muito jovem, mas eu o testei localmente, e parece fazer o que ele diz que deve fazer.

Isso é ... (e isso apenas dos documentos)

npm install -g reggie
reggie-server -d ~/.reggie

então cd no diretório do módulo e ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

finalmente, você pode instalar pacotes do reggie apenas usando essa url em um comando direto do npm install ou de dentro de um package.json ...

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

ou..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}
bwest87
fonte
7

Estruture seu código de maneira acessível, como abaixo. Se isso é possível para você.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

Em MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Pode ser necessário atualizar o package.json como:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Isso funcionou para a minha situação.

dynamiclynk
fonte
5

O Npm agora oferece módulos hospedados privados ilimitados por US $ 7 / usuário / mês, usados ​​dessa forma

cd private-project
npm login

no seu pacote json set "name": " @username/private-project"

npm publish

depois, para exigir seu projeto:

cd ../new-project
npm install --save @username/private-project
roo2
fonte
1
Isso requer uma etapa de login do lado do cliente?
Aidan Hoolachan
O que é uma alternativa para isso? Por exemplo, se você deseja hospedar seu "pacote" no S3 e puxar a partir daí.
Con Contekakos
4

Começando com a resposta do arcseldon , descobri que o nome da equipe era necessário no URL da seguinte forma:

npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"

E observe que a chave da API está disponível apenas para a equipe, não para usuários individuais.

Kramer
fonte
2

Configure para instalar a partir do repositório público do Github, mesmo se a máquina estiver sob firewall:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}
Alex Belozerov
fonte
2

Eu uso o seguinte com um repositório privado do github:

npm install github:mygithubuser/myproject
Lars
fonte
2

Era isso que eu estava procurando :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://[email protected]/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev
Isaías
fonte
2

Você pode usar o Verdaccio para esse fim, que é um registro proxy npm privado leve, construído em Node.js. Também é gratuito e de código aberto. Ao usar o Verdaccio, ele não envolve tanta trabalheira quanto um registro simples do npm privado.

Você pode encontrar informações detalhadas sobre como instalar e executá-lo em seu site, mas aqui estão as etapas:

Exige node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Ele também possui uma janela de encaixe, para que você possa publicá-la com facilidade na sua janela de encaixe disponível publicamente, e voilá, você possui um repositório npm privado que pode ser distribuído para outras pessoas de uma maneira que você a configura!

Dominik
fonte
0

Muito simples -

npm config set registry https://path-to-your-registry/

Na verdade, define registry = "https://path-to-your-registry"esta linha para/Users/<ur-machine-user-name>/.npmrc

Todo o valor que você definiu explicitamente ou foi definido por padrão pode ser visto por: npm config list

sapy
fonte