Utilize âmbitos do npm para gerir pacotes no Azure Artifacts

Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022

Os âmbitos do npm ajudam a categorizar pacotes relacionados em grupos. Permitem-te criar pacotes com os mesmos nomes dos pacotes criados por outros utilizadores sem conflitos. Ao usar scopes, pode separar pacotes públicos e privados adicionando o prefixo de scope @scopeName e configurando o .npmrc ficheiro para usar um feed com esse scope.

O Artefactos do Azure suporta a publicação e descarregamento de pacotes com e sem âmbito a partir de feeds ou registos públicos. Os âmbitos do npm são especialmente úteis quando está a trabalhar com servidores self-hosted no local que não têm acesso à Internet, porque, nesses cenários, não é viável configurar origens upstream. Em resumo, quando usas miras:

  • Não tens de te preocupar com colisões de nomes.
  • Não precisas de alterar o registo do npm para instalar ou publicar pacotes.
  • Cada organização ou utilizador npm tem o seu próprio âmbito, e apenas o proprietário ou os membros do âmbito podem publicar pacotes nesse âmbito.

Pré-requisitos

Produto Requirements
Azure DevOps - Uma Azure DevOps organização.
- Um projeto Azure DevOps .
- Um feed de Artefatos do Azure .
- Baixe e instale Node.js e npm.

Conecte-se ao seu feed

Antes de configurares os scopes npm, liga o teu projeto ao feed do Artefactos do Azure. Certifique-se de que cumpre os pré-requisitos e cria um feed, seguindo depois estes passos.

O Artefactos do Azure recomenda usar dois ficheiros .npmrc separados. Mantém um ficheiro no teu diretório de utilizadores para guardar as tuas credenciais e mantém o segundo ficheiro no mesmo diretório do teu ficheiro depackage.json para guardar a configuração específica do feed.

  1. Inicia sessão no Azure DevOps e depois vai ao teu projeto.

  2. Selecione Artefactos e, em seguida, selecione o seu feed no menu suspenso.

  3. Seleciona Ligar ao feed e depois seleciona npm no painel de navegação esquerdo.

  4. Se for a sua primeira vez a usar o Artefactos do Azure com npm, selecione Obter as ferramentas e siga as instruções para instalar os pré-requisitos para o seu sistema operativo. Primeiro tens de instalar Node.js e npm. Depois, dependendo do seu sistema operativo, instale o vsts-npm-auth para Windows ou configure credenciais para ambientes não Windows. Para orientações sobre sistemas não Windows, veja Ligar-se a um feed - Outro.

  5. Cria um ficheiro .npmrc no mesmo diretório que o teu ficheiro package.json e, em seguida, cola nesse ficheiro o fragmento de código da secção Project setup.

  6. No Windows, execute o seguinte comando para adicionar um token Artefactos do Azure ao seu ficheiro .npmrc ao nível do utilizador. Não precisas de executar este comando todas as vezes. Quando o token expira, o npm devolve um erro 401 Não autorizado para indicar que é altura de o atualizar.

vsts-npm-auth -config .npmrc

Observação

vsts-npm-authnão é suportado no Azure DevOps Server. Para orientações para sistemas não Windows, veja Ligar-se a um feed - Outro.

Configuração de escopo

Para usar scopes com o Artefactos do Azure, atualize o ficheiro .npmrc do seu projeto para que os pacotes com scope que publicar ou instalar resolvam através do seu feed. Substituir registry=<YOUR_SOURCE_URL> por @ScopeName:registry=<YOUR_SOURCE_URL>.

Também atualize o seu ficheiropackage.json para incluir tanto o nome do âmbito como o nome do pacote, por exemplo: { "name": "@ScopeName/PackageName" }. Os exemplos seguintes mostram como configurar feeds com âmbito organizacional e âmbito de projeto.

  • Feed de âmbito organizacional:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • Fluxo vinculado ao projeto:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    always-auth=true
    
    {
      "name": "@ScopeName/PackageName"
    }
    

Example

  • O ficheiro .npmrc :

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
    always-auth=true
    
  • O ficheiro package.json:

    {
      "name": "@demo/js-e2e-express-server",
      "version": "2.0.0",
      "description": "JavaScript server written with Express.js",
      "main": "index.js",
      "directories": {
        "doc": "docs",
        "test": "test"
      }
    }
    

Publicar pacotes com escopo

Depois de configurar o seu escopo e atualizar os ficheiros do seu projeto, abra uma janela da linha de comandos, navegue até ao diretório do seu projeto e execute o seguinte comando para publicar o seu pacote associado ao escopo. No exemplo anterior, o pacote é publicado dentro do @local âmbito.

npm publish

Fontes upstream vs escopos

As fontes a montante oferecem a maior flexibilidade. Ao utilizar origens a montante, pode consumir tanto pacotes com âmbito como pacotes sem âmbito do seu feed do Artefactos do Azure, bem como utilizar pacotes de repositórios públicos, como o npmjs.com. Esta abordagem funciona bem quando se quer que um único feed atue como principal fonte tanto para pacotes internos como para dependências externas aprovadas.

Os telescópios são mais restritivos, mas podem ser uma opção prática no cenário certo. Quando usas escopos, cada nome de pacote deve começar por @<scope>, o que significa que tens de adotar e manter essa convenção de nomes entre os teus pacotes. Por exemplo, se publicar um pacote como @local/my-package, deve continuar a usar esse nome com âmbito em qualquer lugar onde o pacote seja referenciado.

Este requisito pode aumentar a sobrecarga, especialmente se planeia publicar os mesmos pacotes num registo público mais tarde. Se remover os escopos ao implementar os seus pacotes, deve também atualizar as referências correspondentes nos ficheiros package.json e em quaisquer projetos dependentes.

Mesmo com essas limitações, os osciloscópios podem constituir uma alternativa viável quando as fontes de sinal a montante não são uma opção prática. Isto é especialmente verdade em ambientes isolados ou auto-hospedados, onde o acesso a registos públicos não está disponível e se quer evitar colisões de nomes de pacotes, mantendo os pacotes organizados dentro do seu feed.