Repositório local (offline) do npm


Antecedentes


Decidindo vender a um preço alto, acabei no empregador, onde não há Internet não apenas no circuito industrial, mas também na donzela (a situação não é incomum em muitas, por assim dizer, "empresas"). Existe o IE no console em que você, meu caro leitor, pode, é claro, olhar para o Habr ou o stackoverflow, mas não mais. Em geral, repito, a situação não é excepcional, você pode conviver com ela - aqui está, meu laptop pessoal no qual eu escrevo, está sobre a mesa ... é o wifi levantado por muitos funcionários, é celular como modem, em geral, se não é uma defesa / quaisquer serviços de três letras (aqui eu aconselho você a seguir maneiras caras e oficiais, como serão algumas das palavras abaixo) e não houver serviço de monitoramento de rádio, você poderá fazer qualquer coisa com seu laptop pessoal (dentro do permitido): pelo menos é assim que parece conosco. Existe a possibilidade de arrastar arquivos para o ambiente de desenvolvimento, mas eu realmente não gostei da decisão de manter node_modules na base de código e arregaçou as mangas (enrolei as mangas muitas vezes sobre mudar de TFS para git e sobre o repositório local de nuget, mas estas são histórias separadas, também não sem drama, mas sobre elas de alguma forma da próxima vez). Existem várias soluções bastante caras para o problema, é bem possível que eu consiga avançar com algum artefato, mas quando imaginei o quanto isso levaria e, o mais importante, quanto tempo seria decidido, coordenado e implementado, foi decidido agir de forma barata e com raiva.


Isenção de responsabilidade: como eu tinha um ambiente Windows, descrevo em detalhes exatamente o trabalho no console do Windows; no entanto, em essência, as diferenças só estarão no final quando você desejar aumentar o resultado final como um serviço / daemon.


Não Tomi, alma gêmea, como?


Na ação envolvida:


  • Um computador com acesso à Internet - chame-o de origem
  • Um computador sem acesso, em uma rede corporativa - chame-o de máquina de destino

Deve haver node.js na origem e na máquina de destino (a maneira mais fácil é se houver uma ou uma versão similar).


Crie um pai na fonte, em algum lugar e chame-o, por exemplo, verdaccio:


mkdir verdaccio cd verdaccio 

Depois de instalar o Verdaccio localmente, isso é uma coisa muito útil, com base no antigo projeto sinopia. Leia mais aqui: https://verdaccio.org/ .


Em resumo, este é um proxy para o npm, que pode armazenar em cache. Para muitos usuários deste pacote, a principal oportunidade é a capacidade de publicar em particular, meu caso é um pouco diferente, eu queria armazenar em cache tudo o que preciso para trabalhar e um pouco mais e depois transferir tudo para a máquina de destino. Olhando para o futuro, direi que tudo correu bem sem dor, exceto pela transferência de nó-sass. Foi a raiz de seus tarballs que passei um dia e meio (há uma parte nativa que é carregada no github durante a instalação ou vai para o gyp, se não der certo, pense bem, ela será construída em cada máquina de desenvolvimento local, o que é completamente desconfortável), mas provavelmente outra história também.


Tudo é simples aqui:


 npm i verdaccio 

Em geral, o manual recomenda a instalação global, mas, na verdade, isso não é necessário; além disso, queremos localizar toda essa desgraça em uma pasta, para que mais tarde possa ser convenientemente copiada. Porque assim ...


Execute o pacote, ele criará o armazenamento e a configuração padrão:


 .\node_modules\.bin\verdaccio.cmd 


Então, todo mundo nos disse onde está a configuração, em qual porta estamos pendurados.


Em princípio, você já pode ir para o endereço especificado e ver algo assim:



Agora precisamos fazer algumas coisas:


  • Limpar npm-cache ( mais detalhes aqui , resumindo, elimine o conteúdo de % AppData% / npm-cache )


  • Executar


     npm set registry http://localhost:4873/ 

  • Copie config.yaml para a nossa aconchegante pasta verdaccio


  • Verifique se a seção de uplinks desse arquivo se parece com isso:


     uplinks: npmjs: url: https://registry.npmjs.org/ cache: true 

  • No final da configuração, adicione:


     listen: - 0.0.0.0:4873 

    Se isso não for feito, você não poderá acessar o endereço local posteriormente na máquina de destino.


  • Na verdade, estamos prontos, agora todos os pacotes que instalamos no npm install serão instalados em ./store, que é o que precisamos. Restauramos o projeto de destino, definimos adicionalmente:



 npm i node-windows 

Depois disso, pegamos a pasta e a enviamos para a máquina de destino da maneira que for possível (direitos de administrador são necessários lá, sim). Já é possível, você pode criar imediatamente um arquivo na raiz da pasta installservice.js:


 var Service = require('node-windows').Service; var svc = new Service({ name: 'VerdaccioSvc', description: 'Verdaccio - npm local repository', script: ' <   >\\node_modules\\verdaccio\\bin\\verdaccio', nodeOptions: [] }); svc.on('install', function() {svc.start();}); svc.install(); 

Lançamos:


 node installservice.js 

Aproveite!


Em geral, conseguimos um repositório local com muito pouco sangue, builds estão sendo construídos, desenvolvedores estão desenvolvendo tudo neste mundo em seus lugares. E sim, a sincronização subsequente se resume a copiar o conteúdo de ./store .


Tudo isso foi escrito em parte como um memorando e em parte para economizar tempo para você (é improvável que a tarefa seja resolvida com muita frequência), porque se uma flor de pedra não aparecer, sinta-se à vontade para escrever, há uma chance de eu esquecer de descrever algum tipo de detalhe e, se não esqueci, de repente, ajudarei ...

Source: https://habr.com/ru/post/pt453614/


All Articles