<p>yarn não respeita configurações de autenticação em .npmrc</p>

Criado em 14 set. 2017  ·  86Comentários  ·  Fonte: yarnpkg/yarn

Você quer solicitar um recurso ou relatar um bug ?
ERRO
Qual é o comportamento atual?
Yarn não honra .npmrc
Se o comportamento atual for um bug, forneça as etapas para reproduzir.
Exigimos autenticação para um de nossos repositórios e costumávamos fazer isso especificando a autenticação em .npmrc. Isso funcionou até 0.28.4, mas quebrou em 1.0.0

Qual é o comportamento esperado?
Honrando as configurações de autenticação em .npmrc

Mencione seu node.js, yarn e versão do sistema operacional.
Isso acontece depois de atualizar o yarn para 1.0.0 / 1.0.1 (tentei as duas versões). Independentemente do sistema operacional e da versão do nodejs.

cat-bug help wanted

Comentários muito úteis

isso foi relatado em 2017, é 2019 agora e esse problema ainda existe.

Todos 86 comentários

Isso deve ser corrigido no 1.0.2, que foi lançado ontem. Você pode dar uma olhada?

@BYK Estou enfrentando os mesmos problemas mencionados acima e mencionados no final de # 4157. Tentei executar 1.0.2 e falhei com 404 . Executando em 0.27.5 funciona conforme o esperado.

Você poderia colar seu arquivo npmrc aqui para que possamos tentar reproduzi-lo (obviamente, editar segredos ou outras informações privadas)

@KidkArolis ao tentar deixar meu diretório de trabalho o mais limpo possível, ele de alguma forma corrigiu o problema? 🙃

Passos que dei:

  • Exclua yarn.lock e quaisquer yarn-error.log arquivos
  • Excluir node_modules/
  • brew link yarn e yarn --version para garantir que eu estava em 1.0.2
  • yarn

Isso parece ter funcionado. Vou riscar isso como um erro do usuário meu e da minha equipe.

@beardedtim E se você explodir node_modules mas manter yarn.lock e executar yarn install ? Tudo funciona então? Isso é em parte o que # 4157 rastreia, mas pode estar relacionado ao problema maior em questão?

Estou tendo esse problema (404 no repositório de escopo privado, qualquer registro que eu use) para as versões do yarn 1.0.1 e 1.0.2. A versão 0.27.5 funcionou após limpar alguns artefatos.

Tentei todas as soluções alternativas discutidas em https://github.com/yarnpkg/yarn/issues/4157. Fico feliz em postar logs, se isso ajudar.

@stieg vou tentar isso mais tarde hoje, quando tiver um momento livre na hora do almoço e postar os resultados. Acredito que ainda recebo o erro 404, mas já tentei tantas coisas até agora, quem sabe!

Alguém encontrou uma solução para isso?

FWIW: Tentei com:

  • Limpando meu node_modules
  • Limpando ~/.yarn
  • curl -o- -L https://yarnpkg.com/install.sh | bash para reinstalar o fio 1.0.2
  • yarn install - _sem erros_, instalou tudo perfeitamente.

Meu ~/.yarnrc :

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


registry "https://registry.npmjs.org"
email [email protected]
lastUpdateCheck 1505977814820
username some-user
````

And my `~/.npmrc`:

//registry.npmjs.org/:_authToken=a-valid-uuid


The `yarn.lock` references look like this in my particular case:

resolvido " https://registry.npmjs.org/@acme/some -module / - / some-module-0.1.1.tgz # valid-git-sha"
`` `

Interessante. Depois de colocar o registro em meu arquivo .yarnrc , fui capaz de instalar meus pacotes. No entanto, eu o removi para verificar se esse era o culpado, e ainda assim deu certo (excluí meu cache, então o Yarn teve que baixá-lo, e ele conseguiu fazer isso corretamente).

Tentei uma nova instalação (Debian desta vez, o outro foi macOS) e ter essas configurações em ~/.npmrc e ~/.yarnrc funcionou igualmente bem lá. (Observação: não experimentei npm login ou yarn login .)

O fechamento como pessoas relatando isso foi resolvido. Reabra com etapas de reprodução concretas se não for resolvido para você @carlosduclos, por favor.

@BYK Eu tive o mesmo problema.
Usei a instalação limpa da versão mais recente do yarn.
E começa a funcionar depois que adicionei registry "https://registry.npmjs.org" a ~/.yarnrc .
Acho que é um bug e deve ser resolvido automaticamente, não manualmente, como fizemos.

@BYK Pode ser https://registry.npmjs.org .

Eu acho que ainda há um problema ao recuperar pacotes privados do registro https://registry.yarnpkg.com , no entanto, e este é o registro padrão usado pelo yarn (ainda é apenas um proxy reverso ? Talvez não esteja honrando os cabeçalhos de autenticação? )

Etapas de reprodução concretas

  1. Exclua / mova seus arquivos .npmrc e .yarnrc para que o yarn use a configuração padrão.
  2. Localize um pacote publicado de forma privada no registro npm.
    1a. Se você baixou / publicou da mesma máquina da qual está testando o fio, limpe o npm e os caches de fio.
  3. Execute npm login ou yarn login para preencher o token de autenticação.
  4. Usando qualquer versão do yarn após 0.27.5 , tente instalar este pacote.
Resultados esperados

O pacote foi instalado com sucesso.

Resultados reais
❤ <strong i="26">@up</strong> ➜  REPO git:(master) ★ yarn add @SCOPE/PACKAGE 
yarn add v1.1.0
info No lockfile found.
[1/5] Validating package.json...
[2/5] Resolving packages...
error An unexpected error occurred: "https://registry.npmjs.org/@SCOPE%2fPACKAGE: Not found".
info If you think this is a bug, please open a bug report with the information provided in "/home/katy/dev/REPO/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

Se os mantenedores do projeto acharem que as instruções de

Concordo com @kmoe , o problema subjacente não foi corrigido nem mesmo nas versões recentes do yarn. Reabra o problema. Sim, temos uma solução alternativa, mas solução alternativa! = Solução neste caso.

FWIW, isso ainda é um problema em 1.1.0. Acabei de verificar (voltei aqui para a solução alternativa, ou seja, registry "https://registry.npmjs.org" sendo adicionado a ~/.yarnrc )

Estou tendo esse problema no yarn 1.3.2 e ele está quebrando nossas compilações agora. Funcionou bem no fio 0.27.5.

Exigimos um token de autenticação do arquivo .npmrc para instalar pacotes de nosso registro privado Artifactory.

Etapas de reprodução:

  1. Tenha um arquivo .npmrc com informações de autenticação como:
registry=https://artifactory.mycompany.com/artifactory/api/npm/npm-virtual
_auth = myAuthTokenHere
always-auth = true
email = [email protected]
  1. Execute yarn install
  2. Obtenha o erro HTTP 401 quando o yarn tentar instalar coisas do registro privado:
error An unexpected error occurred: "https://artifactory.mycompany.com/api/npm/npm-virtual/@angular/compiler/-/compiler-4.3.1.tgz: Request failed \"401 Unauthorized\"".

Relacionado: # 4672

@stewx Também estou tendo o mesmo problema em 1.3.2. Você encontrou uma solução ou uma maneira de contornar isso?

@jamesone Não, eu

@stewx @jamesone
Adicione registry "https://registry.npmjs.org" em seu .yarnrc e reinstale os pacotes privados
Ele dirá ao yarn para trabalhar diretamente com o registro npmjs e resolverá o problema

Parece tão errado bloquear a versão em 0.27.5 apenas para contornar este problema, mas parece que muitos estão fazendo exatamente isso _ou_ redirecionando registry config (embora @stewx esteja relatando que não resolve para auto-hospedado registros privados).

Se os contribuidores frequentes do projeto não tiverem tempo para consertar isso em curto prazo, alguém estaria disposto a sugerir os locais da base de código onde a correção tem maior probabilidade de sucesso, na esperança de que um PR da comunidade seja aberto? 🤔

/ cc @kittens @bestander @BYK @arcanis @ rally25rs @kaylieEB

@Bnaya Quando você diz reinstalar, você quer dizer remover node_modules do seu projeto ou limpar o cache de fios?

fio remova seu pacote privado; fio adicionar seu pacote privado

E no arquivo de bloqueio você verá https://registry.npmjs.org/*** url e não https://registry.yarnpkg ***

Eu sugeriria adicionar o .yarnrc próximo ao seu package.json

Na verdade, fiz funcionar colocando registry "https://registry.npmjs.org" em ~/.yarnrc , ou seja, não há necessidade de um pacote local .yarnrc .

Etapas para reproduzir o erro para mim:

  • não tem um ~/.yarnrc modificado
  • criar novo projeto
  • Yarn cache clean
  • yarn add privatemodule -> falha

Se eu modificar ~/.yarnrc conforme mencionado acima, as etapas não criarão um erro.

Se eu olhar para alguns dos meus projetos onde há falhas, vejo que yarn.lock contém https://registry.yarnpkg.com/@myscope/mypackage/ . Para fazer esses projetos funcionarem, preciso remover yarn.lock e regenerá-lo, após ter feito a atualização para ./.yarnrc .

Isso parece explicar por que algumas pessoas ainda cometem erros mesmo quando tentam algo que funciona para outras.

Como resolver em conclusão:

  • adicione registry "https://registry.npmjs.org" a ~ / .yarnrc
  • remover e regenerar yarn.lock para projetos com falha

@TheLudd A regeneração de yarn.lock do zero

Em vez disso, os mantenedores do projeto podem querer considerar a busca / substituição de yarnpkg.com por npmjs.org , preservando seu estado de arquivo de bloqueio atual.

@awkaiser Bom, contanto que seus testes passem você pode submetê-lo e todos os outros colaboradores terão o mesmo ambiente que você. Portanto, não estou realmente derrotando seu propósito, IMO.
Mas sim, você também pode pesquisar substituir.

Mas a regra também é que você não deve modificar yarn.lock manualmente;)

Se fosse sempre seguro extrair os pacotes mais recentes absolutos que satisfazem nossos requisitos de package.json , não teríamos necessidade de lockfiles. 😜

Normalmente, sim, não devemos modificar yarn.lock manualmente, mas isso, sendo um bug, oferece uma exceção a essa regra. Atualizar a referência do local do registro com uma pesquisa e substituição deve ser simples e seguro. 🍻

Não precisei regenerar todo o meu arquivo de bloqueio.
Apenas para remover e instalar os pacotes privados

@awkaiser ou qualquer outra pessoa no tópico - uma maneira de ajudar é criando um exemplo reproduzível. Por exemplo, baseie-se neste repositório https://github.com/KidkArolis/yarn-scopes-issue. Se você puder produzir um repo em que a execução de yarn falhe (resposta específica do registro, configuração específica do yarn, package.json específico etc.) - eu poderia definitivamente dar uma olhada na correção do problema.

Geralmente:

  1. Você não precisa de .yarnrc file
  2. Você não precisa de .yarnrc para conter registry "https://registry.npmjs.org"
  3. Módulos privados de registry.npmjs.org devem funcionar
  4. Módulos privados de custom.registry.org devem funcionar

@KidkArolis as falhas são aleatórias. mas eles estão lá.
Como escrevi em outro problema relacionado: é ou um problema com o registro do yarn (talvez falhas de cache, cabeçalho Vary incorreto no proxy, o que for) ou caso complexo dentro do yarn que acontece apenas com o registro do yarn.

O que @kmoe escreveu em 25 de setembro de 2017 é insuficiente? 🤔

Isso levou à reabertura desta edição, implicando a reprodução por contribuidor (es).

@KidkArolis Não tenho certeza de como posso criar um exemplo reproduzível em um repositório, pois isso diz respeito a módulos privados e, portanto, depende de quem executa o yarn, certo? Mas meus passos para reproduzir o erro estão aqui https://github.com/yarnpkg/yarn/issues/4451#issuecomment -355248563 e o que @kmoe escreveu também é suficiente.

Quando tento instalar um pacote privado sem modificar .yarnrc o erro que recebo começa com

Ocorreu um erro inesperado: " https://registry.yarnpkg.com

Isso significa que ele procura no registro de fios e não no npm. Não é esse o erro que está causando o bug?

Ok, obrigado por restaurar essas etapas de reprodução. Vou tentar dar uma olhada.

Por alguma razão, adicionar esse local explícito a .npmrc para onde encontrar meus pacotes privados fez com que o erro 404 parasse de acontecer em todos os repositórios nos quais isso estava causando um problema.

@npm-username:registry=https://registry.yarnpkg.com/

Alguém tem um pacote npm privado ao qual poderia me adicionar? Nome de usuário: kidkarolis .

Estou lutando para obter uma conta paga, o sistema de faturamento / conta deles não parece estar funcionando para mim no caixa eletrônico (recebo 402 Payment Required embora eles me cobrem: - "). Enquanto espero pelos npm's suporte, se alguém me adicionar a um pacote privado (se isso for possível), isso iria acelerar as coisas.

Ok, acho que foi apenas ... consistência eventual, minha conta npm privada funciona agora.

No entanto, ainda não consigo reproduzir o problema :(

Eu segui as etapas fornecidas por @kmoe :

  1. rm ~/.yarnrc && rm ~/.npmrc
  2. yarn cache clean && npm cache clean --force
  3. npm login
  4. yarn add @scope/pkg

Ele instala bem (e não funciona se eu não npm login ). Em outras palavras - funciona conforme o esperado para mim.

E a julgar pelo yarn.lock, minha instalação passa por https://registry.yarnpkg.com e parece usar a autenticação conforme o esperado. Será que houve um problema no servidor no passado, mas agora está resolvido?

Ok, acho que reproduziu algo.

Se eu adicionar <strong i="6">@qubit</strong>:registry=https://registry.npmjs.org/ a .npmrc - a instalação não funciona mais.
Acho que essa linha é adicionada se você entrar com npm login --scope=@qubit e não é adicionada se você entrar com apenas npm login . Veremos como consertar isso a seguir.

@KidkArolis outra maneira comum de definir essa configuração seria:

npm config set <strong i="8">@qubit</strong>:registry https://registry.npmjs.org

Aberto um PR - feedback # 5162 (ou mesmo QA) de boas-vindas.

@KidkArolis Obrigado pelo PR. Mas acho que o problema não está apenas no caso "--scope", mas em um caso mais geral onde um repositório privado também espelha pacotes públicos com auth.

A propósito, @ bytheway875 , seu truque de usar https://registry.yarnpkg.com/ como o registro funcionou para mim.

Minha situação:

  • Objetivo: instalar pacotes privados com yarn de uma organização (@ org-name) em npmjs.com usando um authToken no arquivo local .npmrc durante uma construção de CI (GitLab), então não logado em npm .
  • trabalha com npm
  • sem problemas na máquina de desenvolvimento (mac), posso npm login e yarn simplesmente funcionar OU posso ser desconectado do npm, mas criar manualmente um diretório / HOME local .npmrc com uma única linha: //registry.npmjs.org/:_authToken=token e yarn simplesmente funciona (esse segundo método _pode_ estar funcionando por causa do cache local, não tente limpá-lo)
  • .yarnrc truque acima não funcionou

_A única maneira de fazer isso funcionar é criando o arquivo local .npmrc abaixo antes de executar yarn install no CI: _

@org-name:registry=https://registry.yarnpkg.com/
always-auth=true
_authToken=token

Tive um problema semelhante com o arquivo .npmrc . Tudo o que tive que fazer foi definir a codificação do arquivo .npmrc como ANSI (no Windows, você pode usar notepad.exe> ​​Salvar como ...).
Você pode testar como o yarn vê o conteúdo do seu arquivo .npmrc usando yarn config list

Não consigo fazer isso funcionar com v1.4.1 . Eu tenho um repositório Nexus privado e uso-o como cache / proxy ( assim ). Não consigo encontrar instruções definitivas, então é possível que esteja fazendo algo errado. Eu peguei a sintaxe yarn config aqui e a yarn login aqui .

Edit : Eu deveria ter mencionado que tentei fazer login via NPM primeiro para obter os .npmrc antes de tentar com yarn .

Abaixo está exatamente o que estou fazendo para testar.

Verificar consolidação de mesclagem (dc705768)

git tag --contains dc705768
v1.4.0
v1.4.1

Configuração

Crie um Dockerfile para fornecer um ambiente de linha de base consistente para teste.

# Build
#  docker build -t yarn-private-registry-test .
# Run
#  docker run -it --rm yarn-private-registry-test

FROM debian:9.3-slim

WORKDIR /projects

RUN apt-get update \
  && apt-get --yes install curl gnupg \
  && curl -sL https://deb.nodesource.com/setup_8.x | bash - \
  && apt-get install --yes nodejs \
  && curl -OL https://github.com/yarnpkg/yarn/releases/download/v1.4.1/yarn_1.4.1_all.deb \
  && find . -name yarn*.deb -exec dpkg --install {} \; \
  && find . -name yarn*.deb -exec rm {} \;

Imagem Build Docker

docker build -t yarn-private-registry-test .

Fio de Teste

Dica : Continue saindo e reiniciando o contêiner do Docker para obter um ambiente limpo.

Sem configuração

Certifique-se de que o ambiente funcione inicializando um projeto e adicionando uma dependência sem fazer alterações de configuração.

Executar Docker Container

docker run -it --rm yarn-private-registry-test

Teste

Adicionar dependência left-pad .

mkdir yarn \
  && cd yarn \
  && yarn init --yes \
  && yarn add left-pad
yarn init v1.4.1
warning The yes flag has been set [...snip...]
success Saved package.json
Done in 0.03s.
yarn add v1.4.1
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
└─ [email protected]
Done in 0.52s.

Configuração de registro privado

Executar Docker Container

docker run -it --rm yarn-private-registry-test

Teste

mkdir yarn \
  && cd yarn \
  && yarn init --yes \
  && yarn config set registry https://example.com/repository/npm-group/ \
  && yarn login
yarn init v1.4.1
warning The yes flag has been set [...snip...]
success Saved package.json
Done in 0.03s.
yarn config v1.4.1
success Set "registry" to "https://example.com/repository/npm-group/".
Done in 0.04s.
yarn login v1.4.1
question npm username: myusername
question npm email: [email protected]
Done in 6.25s.

Adicionar dependência left-pad .

yarn --verbose add left-pad
yarn add v1.4.1
verbose 0.349 Checking for configuration file "/projects/yarn/.npmrc".
verbose 0.35 Checking for configuration file "/usr/local/share/.npmrc".
verbose 0.35 Checking for configuration file "/usr/etc/npmrc".
verbose 0.352 Checking for configuration file "/root/.npmrc".
verbose 0.353 Checking for configuration file "/projects/yarn/.npmrc".
verbose 0.353 Checking for configuration file "/projects/.npmrc".
verbose 0.355 Checking for configuration file "/projects/yarn/.yarnrc".
verbose 0.355 Checking for configuration file "/usr/local/share/.yarnrc".
verbose 0.357 Found configuration file "/usr/local/share/.yarnrc".
verbose 0.358 Checking for configuration file "/usr/etc/yarnrc".
verbose 0.358 Checking for configuration file "/root/.yarnrc".
verbose 0.359 Checking for configuration file "/projects/yarn/.yarnrc".
verbose 0.359 Checking for configuration file "/projects/.yarnrc".
verbose 0.365 current time: 2018-01-25T21:55:48.886Z
info No lockfile found.
verbose 0.405 Performing "GET" request to "https://yarnpkg.com/latest-version".
[1/4] Resolving packages...
verbose 0.48 Performing "GET" request to "https://example.com/repository/npm-group/left-pad".
verbose 0.52 Request "https://example.com/repository/npm-group/left-pad" finished with status code 401.
verbose 0.522 Error: Couldn't find package "left-pad" on the "npm" registry.
    at new MessageError (/usr/share/yarn/lib/cli.js:186:110)
    at NpmResolver.<anonymous> (/usr/share/yarn/lib/cli.js:50354:15)
    at Generator.next (<anonymous>)
    at step (/usr/share/yarn/lib/cli.js:98:30)
    at /usr/share/yarn/lib/cli.js:109:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
error An unexpected error occurred: "Couldn't find package \"left-pad\" on the \"npm\" registry.".
info If you think this is a bug, please open a bug report with the information provided in "/projects/yarn/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
verbose 0.809 Request "https://yarnpkg.com/latest-version" finished with status code 200.

Verifique .yarnrc

cat /usr/local/share/.yarnrc
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


registry "https://example.com/repository/npm-group/"
email [email protected]
lastUpdateCheck 1516917349331
username myusername

Teste NPM

Vá direto para a configuração desejada porque funciona.

Configuração de registro privado

Executar Docker Container

docker run -it --rm yarn-private-registry-test

Teste

mkdir npm \
  && cd npm \
  && npm init --yes \
  && npm config set registry https://example.com/repository/npm-group/ \
  && npm login
Wrote to /projects/npm/package.json:

{
  "name": "npm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


Username: myusername
Password:
Email: (this IS public) [email protected]
Logged in as myusername on https://example.com/repository/npm-group/.

Adicionar dependência left-pad .

npm --verbose install left-pad
npm info it worked if it ends with ok
npm verb cli [ '/usr/bin/node',
npm verb cli   '/usr/bin/npm',
npm verb cli   '--verbose',
npm verb cli   'install',
npm verb cli   'left-pad' ]
npm info using [email protected]
npm info using [email protected]
npm verb npm-session 0ed36c84804378c8
npm http fetch GET 200 https://example.com/repository/npm-group/left-pad 78ms
npm http fetch GET 200 https://example.com/repository/npm-group/left-pad/-/left-pad-1.2.0.tgz 28ms
npm verb correctMkdir /root/.npm/_locks correctMkdir not in flight; initializing
npm verb makeDirectory /root/.npm/_locks creation not in flight; initializing
npm verb lock using /root/.npm/_locks/staging-2f9f45630e5bbb1a.lock for /projects/npm/node_modules/.staging
npm info lifecycle [email protected]~preinstall: [email protected]
npm info linkStuff [email protected]
npm verb linkBins [email protected]
npm verb linkMans [email protected]
npm info lifecycle [email protected]~install: [email protected]
npm info lifecycle [email protected]~postinstall: [email protected]
npm verb unlock done using /root/.npm/_locks/staging-2f9f45630e5bbb1a.lock for /projects/npm/node_modules/.staging
npm verb saving [ { name: 'left-pad', spec: '^1.2.0', save: 'dependencies' } ]
npm info lifecycle undefined~preshrinkwrap: undefined
npm info lifecycle undefined~shrinkwrap: undefined
npm notice created a lockfile as package-lock.json. You should commit this file.
npm info lifecycle undefined~postshrinkwrap: undefined
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
added 1 package in 0.398s
npm verb exit [ 0, true ]
npm info

@ryanjaeb Obrigado pelo relatório detalhado. A única coisa que estou perdendo para dizer o que pode estar errado aqui é o conteúdo dos arquivos ~/.npmrc e ~/.yarnrc . Você colou seu .yarnrc , mas ele não contém a senha. Além disso, sem o arquivo .npmrc para comparação, é difícil apontar o problema.

Seu caso de uso deve funcionar bem em ^ 1.4.0, mas é tudo sobre a aparência do arquivo de configuração.

Tbh com você, eu nunca uso yarn login , primeiro eu npm login e depois uso yarn . No exemplo acima, se você primeiro fizer npm set config registry ... && npm login e depois executar add left-pad - isso funciona? Se o npm funciona, o fio também deve funcionar. Portanto, estou me perguntando se o comando yarn login está quebrado.

@KidkArolis Ao ignorar yarn login e esperar poder fazê-lo funcionar com apenas npm login , consegui fazer algum progresso. Estou vendo duas coisas.

.npmrc

Os documentos para npm-login não parecem corresponder ao que estou vendo em .npmrc . Especificamente, o argumento --always-auth para o comando npm login não tem impacto na configuração, embora os documentos digam:

Pode ser usado com --registry e / ou --scope, por exemplo
...
A configuração específica do registro de always-auth tem precedência sobre qualquer configuração global.

No entanto, independentemente de usar ou não esse argumento, sempre acabo com o mesmo .npmrc . Ambos:

npm config set registry https://example.com/repository/npm-group/ \
  && npm login --registry=https://example.com/repository/npm-group/

e

npm config set registry https://example.com/repository/npm-group/ \
  && npm login --registry=https://example.com/repository/npm-group/ --always-auth

produza este .npmrc :

registry=https://example.com/repository/npm-group/
//example.com/repository/npm-group/:_authToken=NpmToken.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Farejar o tráfego que vai para meu registro mostra que o NPM envia o token de autenticação independentemente:

GET /repository/npm-group/left-pad HTTP/1.1
Host: example.com
user-agent: npm/5.6.0 node/v8.9.4 linux x64
npm-in-ci: false
npm-scope: 
npm-session: c4c14c0b37be7bd5
referer: install left-pad
pacote-req-type: packument
pacote-pkg-id: registry:manifest
accept: application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*
authorization: Bearer NpmToken.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
accept-encoding: gzip,deflate
X-Forwarded-Proto: https
X-Forwarded-For: 10.10.10.1
X-Forwarded-Host: example.com
X-Forwarded-Server: example.com
Connection: Keep-Alive

O Yarn não envia o token a menos que always-auth esteja definido. Definir explicitamente o sinalizador always-auth em .npmrc faz com que tudo funcione conforme o esperado.

npm config set always-auth true \
    && cat ~/.npmrc
registry=https://example.com/repository/npm-group/
//example.com/repository/npm-group/:_authToken=NpmToken.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
always-auth=true

Além de saber que o comportamento entre o NPM e o Yarn difere, não estou familiarizado o suficiente com nenhum deles para saber qual comportamento é o correto.

yarn login

Acho que você pode estar certo sobre yarn login não funcionar, mas não testei extensivamente. Ignorando .npmrc e usando apenas yarn , tento imitar a configuração do NPM.

yarn config set registry https://example.com/repository/npm-group/ \
    && yarn config set always-auth true \
    && yarn login

.yarnrc :

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


registry "https://example.com/repository/npm-group/"
always-auth true
email [email protected]
lastUpdateCheck 1517883362958
username myusername

Não importa o que eu faça, nunca sou solicitado a inserir minha senha.

@KidkArolis Para mim, npm funciona sem always-auth=true explícito em .npmrc e yarn (1.3.2 ou 1.4.0) não. No meu caso, estou tentando apontar todas as solicitações para o registro virtual no artifactory. Com always-auth=true e authToken em .npmrc - funciona em 1.3.2 , então não está claro o que foi exatamente corrigido em 1.4.0 .

Isso ainda parece ser um problema, especificamente conectar-se ao nosso repositório Nexus.

Eu tentei várias abordagens:

  1. Excluindo meu ~/.yarnrc completamente e contando apenas com o que está em ~/.npmrc .
  2. Mexendo com as configurações do registro em ~/.yarnrc .

Parece que o fio não está usando o _auth hash _auth=xyz ) de ~/.npmrc

Informação da versão

NPM

npm --version                                                                                                                                                                                                                                                                                                      
5.6.0

Fio

yarn --version
1.5.1

Executando no OS X 10.13.2.

NPMRC

Meu ~/.npmrc tem esta aparência (algumas configurações _valores_ foram omitidas por razões óbvias):

registry=http://nexus-repo:8081/content/repositories/npm-all
init.author.name=Juan Smith
[email protected]
init.author.url=http://nexus-repo:8081/content/repositories/npm/
[email protected]
_auth=BASE64-HASH-USERNAME-PASSWORD
always-auth=true

YARNRC

Meu ~/.yarnrc parece com isto (novamente, valores óbvios omitidos):

registry "http://nexus-repo:8081/content/repositories/npm-all//"
email [email protected]
lastUpdateCheck 1521495247797
username jsmith

¯_ (ツ) _ / ¯

Não tenho certeza para onde ir a partir daqui. Não está totalmente claro o que está acontecendo, exceto que todas as construções de fios falham da seguinte maneira:

error An unexpected error occurred: "http://nexus-repo:8081/content/groups/npm-all/lru-cache/-/lru-cache-4.1.2.tgz: Request failed \"401 Unauthorized\"".

FWIW, IANADOE (Não sou um engenheiro de Dev Ops) e estou apenas tentando utilizar um pacote que se apóia em fios para construir elétrons. Pode ser que eu não saiba como definir o hash de base64 username | senha para o yarn. Não consegui encontrar documentos explicando isso.

@ezweave Sonatype tem uma documentação muito npm Bearer Token Realm no Nexus e usar npm login em minha estação de trabalho. Ex:

npm config set registry http://nexus-repo:8081/content/repositories/npm-all
npm login --registry=http://nexus-repo:8081/content/repositories/npm-all --always-auth
npm config set always-auth true

Certifique-se de que funciona com o NPM antes de experimentar o Yarn. Não sei se isso importa, mas você tem duas barras finais ( // ) no registro .yarnrc .

@ryanjaeb então, nossa equipe de devops bloqueou o Nexus para _apenas_ oferecer suporte ao reino LDAP. Este pode ser o cerne do problema, mas existem muitas ferramentas que dependem de yarn que não posso usar porque parece não ser compatível. Tentei anexar _auth como um parâmetro na sintaxe apropriada, etc. Nada parece funcionar. (FWIW: as barras múltiplas eram uma suposta correção para um problema relacionado, eu fiz isso com e sem, sem sucesso.)

Pode confirmar que a autenticação do Yarn está quebrada com o Nexus. yarn login não pede uma senha, mas diz que se conectou com sucesso (não fez - nenhuma mudança no arquivo rc),

Publish solicita a senha e publica, mas nunca lê o token __auth onde quer que esteja definido para que você sempre faça o login. E você também não pode usar fios em um cenário de CI.

o fio não funciona dentro do CI. Isso vai funcionar?

Esse problema deve ter sido corrigido por https://github.com/yarnpkg/yarn/pull/5216. Esse PR tinha uma descrição contendo isto:

Fixes #4157, #4451, #4672, #4119.

e isso fez com que o GitHub fechasse o # 4157 automaticamente apenas quando o PR foi mesclado. As outras questões provavelmente deveriam ter sido fechadas também.

@valscion isso pode ajudar ainda mais com esses problemas - https://github.com/yarnpkg/yarn/pull/5322 , mas escapou pelas rachaduras

Adicionar outro ponto de dados - yarn 1.8.x + falha no meu agente de construção (VSTS). Reverter SOMENTE yarn para 1.7.x resolve o problema. Ele está examinando o registro correto, mas não usando os tokens que são injetados em .npmrc pelo agente de compilação. Sei que existem muitas variáveis ​​aqui, mas achei que pode ser útil.

Executar 1.9.x localmente, onde os tokens são salvos no meu usuário .npmrc , funciona bem.

Versão 1.9.x

2018-08-03T21:17:04.9324575Z [command]C:\Windows\system32\cmd.exe /D /S /C "C:\Builds\_tool\yarn\1.9.4\x64\yarn-v1.9.4\bin\yarn.cmd build"
2018-08-03T21:17:05.4481355Z yarn run v1.9.4
2018-08-03T21:17:05.5418442Z $ lerna clean && lerna bootstrap
2018-08-03T21:17:08.3387809Z lerna info version 2.11.0
2018-08-03T21:17:08.3387809Z lerna info versioning independent
2018-08-03T21:17:08.3856545Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.3856545Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.3856545Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.3856545Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.4012821Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.4012821Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.4169058Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.4325326Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.4325326Z lerna info clean removing <REMOVED>
2018-08-03T21:17:08.7606628Z lerna success clean finished
2018-08-03T21:17:09.5145894Z lerna info version 2.11.0
2018-08-03T21:17:09.5145894Z lerna info versioning independent
2018-08-03T21:17:09.5419287Z lerna info Bootstrapping 9 packages
2018-08-03T21:17:09.5419287Z lerna info lifecycle preinstall
2018-08-03T21:17:09.5576221Z lerna info Installing external dependencies
2018-08-03T21:17:12.8857424Z lerna ERR! execute callback with error
2018-08-03T21:17:12.8857424Z lerna ERR! Error: Command failed: yarn install --mutex network:42424 --non-interactive
2018-08-03T21:17:12.8857424Z lerna ERR! warning package.json: No license field
2018-08-03T21:17:12.8857424Z lerna ERR! warning Waiting for the other yarn instance to finish (4048)
2018-08-03T21:17:12.8857424Z lerna ERR! warning Waiting for the other yarn instance to finish (6896)
2018-08-03T21:17:12.8857424Z lerna ERR! warning No license field
2018-08-03T21:17:12.8857424Z lerna ERR! error An unexpected error occurred: "<INTERNAL_REGISTRY>/lodash.foreach/-/lodash.foreach-2.3.0.tgz: Request failed \"401 Unauthorized\"".
2018-08-03T21:17:12.8857424Z lerna ERR! [1/4] Resolving packages...
2018-08-03T21:17:12.8857424Z lerna ERR! [2/4] Fetching packages...
2018-08-03T21:17:12.8857424Z lerna ERR! info If you think this is a bug, please open a bug report with the information provided in "C:\\Builds\\6\\s\\packages\\<REMOVED>\\yarn-error.log".
2018-08-03T21:17:12.8857424Z lerna ERR! info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
2018-08-03T21:17:12.8857424Z lerna ERR! 
2018-08-03T21:17:12.8857424Z lerna ERR!     at Promise.all.then.arr (C:\Builds\6\s\node_modules\lerna\node_modules\execa\index.js:236:11)
2018-08-03T21:17:12.8857424Z lerna ERR!     at <anonymous>
2018-08-03T21:17:12.9482437Z lerna WARN complete Waiting for 1 child process to exit. CTRL-C to exit immediately.
2018-08-03T21:17:13.0732458Z { Error: Command failed: yarn install --mutex network:42424 --non-interactive
2018-08-03T21:17:13.0732458Z warning package.json: No license field
2018-08-03T21:17:13.0732458Z warning Waiting for the other yarn instance to finish (4048)
2018-08-03T21:17:13.0732458Z warning Waiting for the other yarn instance to finish (6896)
2018-08-03T21:17:13.0732458Z warning No license field
2018-08-03T21:17:13.0732458Z error An unexpected error occurred: "<INTERNAL_REGISTRY>/lodash.foreach/-/lodash.foreach-2.3.0.tgz: Request failed \"401 Unauthorized\"".
2018-08-03T21:17:13.0732458Z [1/4] Resolving packages...
2018-08-03T21:17:13.0732458Z [2/4] Fetching packages...
2018-08-03T21:17:13.0732458Z info If you think this is a bug, please open a bug report with the information provided in "C:\\Builds\\6\\s\\packages\\<REMOVED>\\yarn-error.log".
2018-08-03T21:17:13.0732458Z info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
2018-08-03T21:17:13.0732458Z 
2018-08-03T21:17:13.0732458Z     at Promise.all.then.arr (C:\Builds\6\s\node_modules\lerna\node_modules\execa\index.js:236:11)
2018-08-03T21:17:13.0732458Z     at <anonymous>
2018-08-03T21:17:13.0732458Z     at process._tickCallback (internal/process/next_tick.js:188:7)
2018-08-03T21:17:13.0732458Z   code: 1,
2018-08-03T21:17:13.0732458Z   killed: false,
2018-08-03T21:17:13.0732458Z   stdout: '[1/4] Resolving packages...\n[2/4] Fetching packages...\ninfo If you think this is a bug, please open a bug report with the information provided in "C:\\\\Builds\\\\6\\\\s\\\\packages\\\\<REMOVED>\\\\yarn-error.log".\ninfo Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.\n',
2018-08-03T21:17:13.0732458Z   stderr: 'warning package.json: No license field\nwarning Waiting for the other yarn instance to finish (4048)\nwarning Waiting for the other yarn instance to finish (6896)\nwarning No license field\nerror An unexpected error occurred: "<INTERNAL_REGISTRY>/lodash.foreach/-/lodash.foreach-2.3.0.tgz: Request failed \\"401 Unauthorized\\"".\n',
2018-08-03T21:17:13.0732458Z   failed: true,
2018-08-03T21:17:13.0732458Z   signal: null,
2018-08-03T21:17:13.0732458Z   cmd: 'yarn install --mutex network:42424 --non-interactive',
2018-08-03T21:17:13.0732458Z   timedOut: false,
2018-08-03T21:17:13.0732458Z   exitCode: 1 }
2018-08-03T21:17:13.0888721Z error Command failed with exit code 1.
2018-08-03T21:17:13.0888721Z info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Versão 1.7.X

2018-08-03T21:33:16.4477199Z [command]C:\Windows\system32\cmd.exe /D /S /C "C:\Builds\_tool\yarn\1.7.0\x64\yarn-v1.7.0\bin\yarn.cmd build"
2018-08-03T21:33:16.9633413Z yarn run v1.7.0
2018-08-03T21:33:17.0727225Z $ lerna clean && lerna bootstrap
2018-08-03T21:33:19.2509802Z lerna info version 2.11.0
2018-08-03T21:33:19.2509802Z lerna info versioning independent
2018-08-03T21:33:19.2666043Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.2666043Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.2666043Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.2666043Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.2978554Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.5478528Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.5478528Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.5478528Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.6728520Z lerna info clean removing <REMOVED>
2018-08-03T21:33:19.8759839Z lerna success clean finished
2018-08-03T21:33:20.5947225Z lerna info version 2.11.0
2018-08-03T21:33:20.5947225Z lerna info versioning independent
2018-08-03T21:33:20.6103497Z lerna info Bootstrapping 9 packages
2018-08-03T21:33:20.6103497Z lerna info lifecycle preinstall
2018-08-03T21:33:20.6415982Z lerna info Installing external dependencies
2018-08-03T21:33:23.1103303Z lerna info Symlinking packages and binaries
2018-08-03T21:33:23.1415791Z lerna info lifecycle postinstall
2018-08-03T21:33:23.1415791Z lerna info lifecycle prepublish
2018-08-03T21:33:23.1415791Z lerna info lifecycle prepare
2018-08-03T21:33:23.1415791Z lerna success Bootstrapped 9 packages
2018-08-03T21:33:23.1572133Z $ ts-node ./build/index.ts
2018-08-03T21:33:58.5218101Z Done in 41.54s.

Olá pessoal, tenho um pedido para as pessoas que estão acompanhando esse problema e usando um registro privado.

Estamos considerando descartar o nome do registro do arquivo de bloqueio. Isso tornaria mais fácil mudar de um registro privado para outro, mas a desvantagem é que todos os registros precisam usar URLs semelhantes (uma vez que o nome do host não faria parte da URL, nós apenas o fundiríamos em tempo de execução com o ativo configuração).

Você poderia nos ajudar a confirmar em # 5892 que este fluxo de trabalho funcionaria para seu provedor de registro privado (ou diga-nos se não funcionaria)? Isso nos ajudaria a obter o nível de confiança necessário para fazer essa mudança. Obrigado!

Estou tendo problemas com yarn publish não lendo o token de autenticação do meu .npmrc também. Estou executando isso no Ubuntu.

Versões

fio - 1.9.4
npm - 5.5.1

~ / .npmrc

Esta é a aparência do meu ~/.npmrc (com token e registro ofuscados):

registry=http://myprivateregistry.net/
//myprivateregistry.net/:_authToken="myAuthToken"

Resultado

Quando executo yarn publish --noninteractive , recebo o seguinte erro:

yarn publish v1.9.4
[1/4] Bumping version...
info Current version: 2.1.3
[2/4] Logging in...
error No token found and can't prompt for login when running with --non-interactive.
info Visit https://yarnpkg.com/en/docs/cli/publish for documentation about this command.

Etapas de depuração

Tentei o seguinte sem sucesso:

  • Copiando ~/.npmrc para um .npmrc no diretório do meu projeto
  • Executando yarn login com minhas credenciais antes de executar yarn publish

Também verifiquei que a execução de npm publish passa da etapa de autenticação (falha na etapa de controle de versão porque não me permite substituir o mesmo número de versão. É por isso que quero usar yarn publish --non-interactive , porque permite o upload, digamos, de alterações README com o mesmo número de versão)

Há algo mais que estou perdendo? Obrigado!

@ liuhelen10 Você tem um arquivo .yarnrc dentro do seu projeto? Isso funcionou para mim com token armazenado dentro de ~/.npmrc

Exemplo

$ cat .yarnrc 
registry "https://registry.npmjs.org/"

always-auth = true em .npmrc resolveu, não recebendo mais 401 ao usar o Yarn.
O que não faz sentido, mas tanto faz :)

isso foi relatado em 2017, é 2019 agora e esse problema ainda existe.

Concordo, isso ainda não funciona.

.npmrc

always-auth=true
<strong i="7">@somename</strong>:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=[token]

.yarnc

"<strong i="11">@somename</strong>:registry" "https://npm.pkg.github.com/"

Também estou recebendo um erro com npm.pkg.github.com:

Integrity checked failed (none of the specified algorithms are supported

Também estou recebendo um erro com npm.pkg.github.com:

Integrity checked failed (none of the specified algorithms are supported

Pegando isso também

Tive o mesmo problema ao usar o Nexus versão 3, mas resolvi usando a abordagem mencionada por @plitex neste problema https://github.com/yarnpkg/yarn/issues/3093#issuecomment -317671597.

Coloque este conteúdo no arquivo .npmrc . Você não precisa ter nenhuma configuração no arquivo .yarnrc .

always-auth=true
registry=https://nexus.server.com/repository/npm-group/
//nexus.server.com/repository/npm-group/:_authToken={AUTH_TOKEN}

fio - versão
1.17.3

npm --version
6.10.2

@nbransby , @revmischa : Verifique também o problema # 7552, pode ser que a mensagem de erro esteja correta neste caso.

Duas coisas que me ajudaram:

  1. always-auth = true
  2. rm yarn.lock

Comecei a receber este erro no yarn 1.19.1. Antes disso, o fio parecia coletar corretamente as informações de registro e token de .npmrc , mas com 1.19.1, eu tive que adicionar a configuração registry em .yarnrc também, caso contrário, acabou de obter 401 erros.

Feito isso, funcionou e continuou a coletar o token de .npmrc . Parece uma regressão para mim - não parece haver nenhuma boa razão para replicar a configuração do registro de .npmrc para .yarnrc .

Assim como @rocketraman , assim que instalei o yarn 1.19.1, comecei a experimentar 401s ao tentar instalar pacotes com escopo de um registro privado (nexus). npm install funciona bem.

Fio rebaixado e tudo funcionando novamente:

curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.17.3

pode confirmar que AINDA é um problema

Obtendo 401 erros ao executar yarn install

Request "https://npm.pkg.github.com/user/@scope/package" finished with status code 401.

onde npn install é executado sem problema

Passei as últimas 2 horas depurando esse problema e, graças ao meu amigo @AndreiCalazans , tenho uma solução alternativa.

Compartilhando aqui para qualquer pessoa que possa estar lutando com algo semelhante.

Caso de uso

Estou implantando um projeto que usa espaços de trabalho yarn no Heroku. Mesmo se eu descartar o yarn.lock e usar npm install , o projeto é construído com espaços de trabalho e _não funcionará_ sem yarn .

O projeto depende de pacotes hospedados em pacotes GitHub e precisa ser autenticado no GitHub por meio de um token.

O problema

O Heroku veria um yarn.lock e instalaria dependências com yarn , o que iria ignorar um arquivo ~/.npmrc que eu crio antes da compilação.

Pré-construir, gostaria de executar

echo "always-auth=true\n//npm.pkg.github.com/:_authToken=${GITHUB_NPM_TOKEN}\" >> ~/.npmrc",

Isso cria um arquivo, ~/.npmrc , com este conteúdo:

always-auth=true
//npm.pkg.github.com/:_authToken=whatevermytokenis

yarn ignoraria isso e falharia ao tentar extrair uma dependência do registro do pacote GitHub com 401 Unauthorized .

A Solução Alternativa

Andrei mencionou o aliasing _apenas org_ para usar o registro do GitHub e _então_ adicionando o token de registro do GitHub em.

Essencialmente, alterando o arquivo ~/.npmrc ligeiramente para adicionar o seguinte:

always-auth=true
+<strong i="36">@MY_ORG</strong>:registry=https://npm.pkg.github.com/

//npm.pkg.github.com/:_authToken=whatevermytokenis

Isso resolveu tudo e, de repente, yarn usou o token de autenticação fornecido para npm.pkg.github.com para qualquer pacote em @MY_ORG que era a organização GitHub.

Uau! Espero que isso ajude alguém! 💞

Isso ainda é um problema !! A instalação do NPM é executada sem problemas, yarn add
error Couldn't find package "@diligentcorp/atlas-react" on the "npm" registry. info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

Na minha máquina Windows, o problema era que a pasta do usuário com meu arquivo .npmrc de nível de usuário estava em uma unidade de rede. A pasta do usuário local na máquina não tinha um arquivo .npmrc, mas o yarn parece procurar nesta pasta. Copiar o .npmrc da unidade de rede para a pasta do usuário local corrigiu o problema (um token de autenticação foi armazenado no nível do usuário .npmrc).

Descobri isso por acidente depois de digitar "cd ~" no meu git bash e ele mudou para a pasta home remota (que eu nunca uso).

A solução alternativa

Também estou usando pacotes do GitHub.
Ainda obtendo 401 unauthorized embora funcione perfeitamente bem com npm

Consegui fazer funcionar com o yarn v1.22.0

.npmrc

always-auth=true
<strong i="7">@fortawesome</strong>:registry=https://npm.fontawesome.com
//npm.fontawesome.com/:_authToken=xyz-xyz-xyz-xyz

.yarnrc

"<strong i="11">@fortawesome</strong>:registry" "https://npm.fontawesome.com"

registry "https://some-regular-registry.org"

e então execute: yarn add @fortawesome/fontawesome-pro

Acontecendo comigo também, eu esperava poder fazê-lo funcionar com apenas .npmrc , mas ele só funciona ao adicionar .yarnrc , então temos que duplicar a configuração apenas para fios.

Acho que é isso que estou encontrando. Funciona quando .npmrc está no diretório inicial, mas não no diretório do projeto (necessário para jenkins / travis).
https://github.com/yarnpkg/yarn/issues/8034

Certifique-se de não ter /name após o registro ao definir o com escopo:

- <strong i="7">@4r7d3c0</strong>:registry=https://npm.pkg.github.com/4r7d3c0
+ <strong i="8">@4r7d3c0</strong>:registry=https://npm.pkg.github.com

De acordo com o doc, registry=https://npm.pkg.github.com/OWNER , esqueci que o proprietário não precisa estar lá ao definir o escopo. A NPM poderia lidar com isso, mas a Yarn, não.

Para aqueles que usam aliases, verifique esta solução alternativa: https://github.com/yarnpkg/yarn/issues/8130#issuecomment -636281053

Tive que dividir o nível de usuário .npmrc e o nível de projeto .npmrc para fazer o yarn respeitar os tokens de pacote do GitHub. Mover as declarações de registro nomeadas do nível do usuário para o nível do projeto foi a chave

Conteúdo de ~/.npmrc

_auth=#####TOKEN_FOR_ARTIFACTORY#####
always-auth=true
registry=https://artifactory.mycompany.net/artifactory/api/npm/npm/
//npm.pkg.github.com/:_authToken=####GitHub_NPM_REGISTRY_TOKEN#####

Conteúdo de ~/projects/blah/.npmrc

<strong i="14">@mycompany</strong>:registry=https://npm.pkg.github.com

Até que eu movesse a entrada de registro do pacote ^ named family para o nível de projeto .npmrc , yarn install estava me dando 401 (para pacotes hospedados pelo GH em @mycompany ).

Para a construção do Docker, monte-os separadamente:

base.Dockerfile :

# syntax=docker/dockerfile:1-experimental
## ^ need to enable --mount=type=secret support

ARG BASE_IMAGE
FROM ${BASE_IMAGE} as build

# note that only project-level .npmrc is copied
COPY package.json yarn.lock .npmrc ./

# ~/.npmrc with actual secrets is mounted as "secret" (does not stay in image)
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc,required \
    yarn install --production --frozen-lockfile ...

Comando de compilação do Docker:

DOCKER_BUILDKIT=1 docker build \
        --build-arg BASE_IMAGE=$(BASE_IMAGE) \
        --secret id=npmrc,src="$(HOME)/.npmrc" \
        -t $(IMAGE_NAME):$(IMAGE_TAG) \
        -f base.Dockerfile .

_ (Observe que NÃO preciso de .yarnrc para que isso funcione, mas estou no fio 1.17.3, então as coisas podem ser diferentes para outras versões) _

Pesquisei um pouco mais e parece que o yarn usa as credenciais de autenticação erradas.

~ / .npmrc

//npm-old.visualon.de/npm/vo-npm/:_password=XXXXXX
//npm-old.visualon.de/npm/vo-npm/:username=kriese
//npm-old.visualon.de/npm/vo-npm/:always-auth=true

//npm-new.visualon.de/:_authToken="XXXXXX"

package.json

{
  "name": "yarn-auth",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "tslib": "^2.0.1",
    "moment": "2.20.1"
  }
}

yarn.lock

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


[email protected]:
  version "2.20.1"
  resolved "https://npm-old.visualon.de/npm/vo-npm/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
  integrity sha1-1usaRsvMFKKy+UNBEsH/iQfzE/0=

tslib@^2.0.1:
  version "2.0.1"
  resolved "https://npm-new.visualon.de/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e"
  integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==

Ao tentar instalar o fio, envia o token bearer de npm-new.visualon.de para npm-old.visualon.de . Portanto, semms yarn apenas compara o domínio de base.

Se alguém ainda o enfrentar, foi isso que funcionou para mim.

.npmrc:
always-auth=true
<strong i="6">@orgaccount</strong>:registry=https://npm.pkg.github.com
registry=https://registry.yarnpkg.com

https://npm.pkg.github.com/:_authToken=yyyyjjjjj3333888etc

Não tenho certeza se alguém enfrenta um problema semelhante, mas talvez isso ajude alguém a economizar um pouco de tempo:

Estou usando artefatos do Azure como um registro privado e configurei os arquivos PAT e .npmrc conforme documentado lá.
No entanto, eu estava tendo o mesmo problema de que npm install estava funcionando perfeitamente, mas yarn install encontra o erro 401 o tempo todo.
Depois de um pouco de tentativa e erro, descobri que eu tinha um caractere especial em minha URL do Registro (... @ Local / ...), mas os Artefatos do Azure resolve isso para a representação Unicode em seu guia de configuração. NPM lida com isso muito bem, fio nem tanto. Definir o caractere @ real na URL resolveu meu problema.

Esta página foi útil?
0 / 5 - 0 avaliações