Cli: [BUG] npm unpublish retorna o erro 404 e não o erro impresso, a menos que o nível de log detalhado seja usado

Criado em 29 jun. 2020  ·  14Comentários  ·  Fonte: npm/cli

O que? Por que

npm unpublish não funciona e não mostra nenhum erro, embora o registro responda com um código 404.

Quando

npm unpublish @siliceum/[email protected] --loglevel verbose

Onde

registro público npm

Quão

Comportamento Atual

A linha de comando apenas imprime

enquanto o servidor responde com um erro 404.

Além disso, o ponto de extremidade https://registry.npmjs.org/@siliceum%2fcalcite-cli retorna informações, mas a versão com ?write=true ( https://registry.npmjs.org/@siliceum%2fcalcite-cli?write=true ) retorna um erro 404 não encontrado.

Passos para reproduzir

npm unpublish @siliceum/[email protected]

Comportamento esperado

O pacote não foi publicado ou um erro foi impresso. (em última análise, algo mais que um 404).
Com o nível de log detalhado é possível ter a seguinte saída

npm unpublish @siliceum/[email protected] --loglevel verbose

npm info funcionou se terminar com ok
npm verbo cli [
verbo npm cli 'C: \ Arquivos de programas \ nodejs \ node.exe',
npm verbo cli 'C: \ Arquivos de programas \ nodejs \ node_modules \ npm \ bin \ npm-cli.js',
verbo npm cli 'cancelar a publicação',
verbo npm cli '@ siliceum / [email protected] ',
verbo npm cli '--loglevel',
NPM verbo cli 'verboso'
npm verbo cli]
informações de npm usando
Informação npm usando
npm verbo npm-sessão e43c8f8257e968e5
npm http fetch GET 404 https://registry.npmjs.org/@siliceum%2fcalcite-cli ? write = true 492ms

  • @ siliceum / [email protected]
    saída do verbo npm [0, verdadeiro]
    cronometragem npm npm concluído em 1157ms
    npm info ok
Bug

Comentários muito úteis

Ops! Esqueça isso, acabei de sair e voltar e agora as duas funções funcionam, estranho, desculpe a confusão!

Todos 14 comentários

Também tendo este problema com npm unpublish e npm deprecate !

$ npm deprecate --force --verbose [email protected] "Generates errors related to exports in the browser, use 1.2.2 or newer"
...
npm http fetch GET 200 https://registry.npmjs.org/luar?write=true 328ms
npm http fetch PUT 404 https://registry.npmjs.org/luar 98ms
npm verb stack Error: 404 Not Found - PUT https://registry.npmjs.org/luar - Not found
npm verb stack     at /usr/lib/node_modules/npm/node_modules/npm-registry-fetch/check-response.js:114:15
npm verb stack     at processTicksAndRejections (internal/process/task_queues.js:93:5)
npm verb statusCode 404
npm verb pkgid [email protected]
...
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/luar - Not found
npm ERR! 404 
npm ERR! 404  '[email protected]' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
...
$ npm unpublish --force --verbose [email protected]
...
npm http fetch GET 200 https://registry.npmjs.org/luar?write=true 257ms
npm http fetch PUT 404 https://registry.npmjs.org/luar/-rev/5-260b27ca1cdb4a5d3b4175578e1c0300 99ms
npm verb stack Error: 404 Not Found - PUT https://registry.npmjs.org/luar/-rev/5-260b27ca1cdb4a5d3b4175578e1c0300 - Not found
npm verb stack     at /usr/lib/node_modules/npm/node_modules/npm-registry-fetch/check-response.js:114:15
npm verb stack     at processTicksAndRejections (internal/process/task_queues.js:93:5)
npm verb statusCode 404
npm verb pkgid [email protected]
...
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/luar/-rev/5-260b27ca1cdb4a5d3b4175578e1c0300 - Not found
npm ERR! 404 
npm ERR! 404  '[email protected]' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
...

Tendo o mesmo problema ao executar npm deprecate - recebendo de volta um 404 não encontrado. A causa foi porque eu não fui autenticado corretamente ( npm adduser resolveu) - mas a saída Não encontrado leva você para fora da tangente. Mesmo que não haja a possibilidade de a API do servidor retornar um código de status diferente (como 401), algumas saídas desses comandos para sugerir o login seriam boas. A saída pode ser genérica e sempre exibida ("certifique-se de estar logado!") Ou pode ser exibida se você não tiver um authToken presente.

Mas estou logado! Isso está exatamente na mesma sessão de terminal onde acabei de publicar uma nova versão como o proprietário do pacote

Ops! Esqueça isso, acabei de sair e voltar e agora as duas funções funcionam, estranho, desculpe a confusão!

@luawtf Ah, nesse caso, parece que esta é a mesma situação que a minha - esses comandos exibem 404 Não encontrado quando o problema real está relacionado à autenticação.

Sim! Concordo que um erro mais geral e detalhado seria ótimo.
Além disso, por que o registro retorna um 404 quando um 401 Unauthorized faria mais sentido? Isso também não deveria ser corrigido?

Acordado. Parece estranho para pacotes que já são públicos - não há nada a ganhar em termos de segurança retornando um 404 em vez de 401 neste caso. Faria sentido se um pacote fosse privado, assim como o GitHub mostra um 404 se você tentar acessar um repositório privado quando estiver desconectado, para não revelar o fato de que há algo naquele URL.

Posso confirmar que o problema foi que eu não estava conectado.
Retornar um 401 ou ter uma mensagem avisando sobre não estar conectado parece bom para mim.

encontramos isso com um pacote público também. npm unpublish @scope/package<strong i="5">@version</strong> --verbose mostra um 404, mas caso contrário, o cancelamento da publicação parece ser bem-sucedido

Eu tenho o mesmo problema, não sendo capaz de deprecate um pacote meu. Presumi que tinha algo a ver com o pacote cujo escopo estava sendo %2f na URL, mas realmente não entendo o que está acontecendo.

$ node -v
v14.15.0
$ npm -v
6.14.8
$ npm deprecate @alling/foo-bar "This package should not be used."
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@alling%2ffoo-bar - Not found
npm ERR! 404 
npm ERR! 404  '@alling/foo-bar<strong i="9">@latest</strong>' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

@SimonAlling o que acontece com o npm v7.0.11?

@SimonAlling o que acontece com o npm v7.0.11?

$ docker run -it node bash
# npm -v
7.0.8
# npm login
Logged in as alling on https://registry.npmjs.org/.
npm notice 
npm notice New patch version of npm available! 7.0.8 -> 7.0.11
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.0.11
npm notice Run npm install -g [email protected] to update!
npm notice 
# npm deprecate nonexisting-package-asdfasdf LOL
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/nonexisting-package-asdfasdf?write=true
npm ERR! 404 
npm ERR! 404  'nonexisting-package-asdfasdf<strong i="8">@latest</strong>' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
# npm deprecate @alling/foo-bar "This package should not be used."

Nenhum erro ou outra saída, mas nenhuma mensagem de depreciação apareceu na página do pacote (ou seja, https://www.npmjs.com/package/@alling/foo-bar), mesmo depois de meia hora, então tentei executar o comando novamente:

# npm deprecate @alling/foo-bar "This package should not be used."
npm ERR! code E422
npm ERR! 422 Unprocessable Entity - PUT https://registry.npmjs.org/@alling%2ffoo-bar - Unprocessable Entity

No entanto, se eu for para uma versão específica do pacote (por exemplo, https://www.npmjs.com/package/@alling/foo-bar/v/1.1.6), vejo a mensagem de suspensão de uso esperada *. Mas eu quero que ele apareça na página principal do pacote também (como por exemplo urix ).

* Última versão: _Este pacote tornou-se obsoleto_. Qualquer outra versão: _Esta versão está obsoleta_.

EDITAR: A mensagem de reprovação finalmente apareceu na página principal do pacote.

Isso está usando o npm v7.0.8; você pode npm install -g npm@7 antes de executar o comando deprecate?

A mensagem de reprovação finalmente apareceu na página principal do pacote, então acredito que funcione com o npm v7.0.8. : ligeiramente_smiling_face:

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

Questões relacionadas

DullReferenceException picture DullReferenceException  ·  4Comentários

millerick picture millerick  ·  3Comentários

ahuglajbclajep picture ahuglajbclajep  ·  3Comentários

Cohen-Carlisle picture Cohen-Carlisle  ·  4Comentários

goldingdamien picture goldingdamien  ·  4Comentários