Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Os escopos Npm servem como um meio de categorizar pacotes relacionados em grupos. Esses escopos permitem que você crie pacotes com nomes idênticos aos criados por usuários diferentes sem encontrar conflitos. Usando escopos, você tem a capacidade de segregar pacotes públicos e privados adicionando o prefixo de escopo @scopeName e configurando o arquivo .npmrc para usar exclusivamente um feed com esse escopo específico.
O Azure Artifacts oferece a capacidade para publicar e transferir pacotes escopados e não escopados a partir de feeds ou registos públicos. Os escopos Npm são particularmente valiosos ao trabalhar com servidores locais auto-hospedados sem acesso à Internet, pois a configuração de fontes upstream nesses cenários não é viável. Em resumo, ao usar alcances:
- Não temos que nos preocupar com colisões de nomes.
- Não há necessidade de alterar o registro npm para instalar ou publicar nossos pacotes.
- Cada organização/usuário do npm tem seu próprio escopo, e somente o proprietário ou os membros do escopo podem publicar pacotes em seu escopo.
Configuração do projeto
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Artefatose, em seguida, selecione Conectar para alimentar.
Selecione npme, em seguida, selecione Outro.
Adicione um arquivo
.npmrcno mesmo diretório que o package.jsone cole o seguinte trecho no arquivo.Feed de âmbito organizacional:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME/_packaging/<FEED_NAME>/npm/registry/ always-auth=trueFluxo vinculado ao projeto:
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/ always-auth=true
Configurar credenciais
Copie o seguinte excerto no seu ficheiro
.npmrca nível de utilizador (Exemplo: C:\Users\FabrikamUser.npmrc). Certifique-se de não colá-lo no arquivo .npmrc dentro do repositório de origem.Feed de âmbito organizacional:
; begin auth token //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value ; end auth tokenFluxo vinculado ao projeto:
; begin auth token //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] //pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value ; end auth token
Gere um token de acesso pessoal com Empacotamento>Ler & escrever escopos.
Execute o seguinte comando para codificar seu token de acesso pessoal recém-gerado. Quando solicitado, cole seu token de acesso pessoal e copie o valor codificado Base64 resultante.
node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"Observação
Em julho de 2024, os Tokens de Acesso Pessoal (PATs) do Azure DevOps tinham 82 caracteres. Algumas ferramentas podem inserir quebras de linha automáticas ao codificar tokens para Base64. Para evitar isso, use o sinalizador
-w0com o comando base64 para garantir que a saída permaneça em uma única linha. Neste tutorial, usamos o método Buffer do Node, que produz uma cadeia de caracteres Base64 de linha única por padrão.Abra o arquivo
.npmrce substitua o espaço reservado[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]pelo token de acesso pessoal codificado que acabou de criar.
Configuração de escopo
No arquivo .npmrc, substitua registry=<YOUR_SOURCE_URL> por @ScopeName:registry=<YOUR_SOURCE_URL>.
Certifique-se de incluir os nomes do escopo e do pacote no arquivo package.json da seguinte maneira: { "name": "@ScopeName/PackageName" }. Veja os exemplos abaixo:
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" }Exemplo:
@local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/ always-auth=true{ "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
Abra uma janela de prompt de comando, navegue até o diretório do projeto e execute o seguinte comando para publicar seu pacote com escopo. No nosso exemplo, o nosso pacote está listado na vista @local.
npm publish
Fontes upstream vs escopos
As fontes upstream oferecem a você a maior flexibilidade para usar uma combinação de pacotes com e sem escopo em seu feed, bem como pacotes com e sem escopo de registros públicos, como npmjs.com.
Os escopos, no entanto, impõem uma restrição de nomenclatura aos seus pacotes: cada nome de pacote deve começar com @<scope>. Se você quiser publicar seus pacotes privados em registros públicos, deverá fazê-lo com os escopos intactos. Se você remover escopos de pacote ao implantar seus pacotes, precisará atualizar todas as referências em seu arquivo de package.json. Com isso em mente, os âmbitos podem servir como uma alternativa viável a fontes a montante.