Renomeando um módulo NPM publicado

94

Existe alguma maneira de renomear um módulo NPM que já foi publicado? Desejo alterar o nome do meu módulo para corresponder com mais precisão à API que ele expõe, mas não gostaria de deixar as pessoas que já o instalaram em apuros.

thekevinscott
fonte

Respostas:

123

Não há nenhuma maneira exposta de fazer isso. Quando encontrei isso no passado, minha abordagem foi:

npm deprecate% ProjectName% @ "<= put-latest-version-here" "AVISO: Este projeto foi renomeado para% NewProjectName%. Instale usando% NewProjectName%."

npm Instruções descontinuadas

Peter Flannery
fonte
18

Em palavras simples, não, você não pode. Mas o npm fornece uma solução diferente chamada npm deprecate.

O que ele faz é marcar uma determinada versão ou intervalos de versão desse pacote como obsoleto. A seguir, se alguém tentar instalar este pacote, receberá um pacote de aviso obsoleto junto com sua mensagem personalizada, na qual você pode especificar facilmente o nome do novo pacote.

Uso:

npm deprecate my-package-name@"< latest-version" "your message"

Sua mensagem pode ser qualquer coisa como:

WARNING: This project has been renamed to your-new-package-name. Install using new-package-name instead.
Ujjwal
fonte
1
Provavelmente é melhor usar <=do <que notificar sobre a versão mais recente também.
David Sherret
14

Em menos de 24 horas, executei o seguinte comando para excluir o pacote errado.

npm unpublish <wrong package name> --force
Sheikh Abdul Wahid
fonte
Sim, isso funciona se o pacote acabou de ser publicado (menos de 24 horas)
Moso Akinyemi
10

Da documentação:

Os dados de registro são imutáveis, ou seja, uma vez publicados, um pacote não pode ser alterado. Fazemos isso por razões de segurança e estabilidade dos usuários que dependem desses pacotes.

No entanto, os pacotes recém-publicados - dentro de 72 horas - podem ser cancelados executando:

npm unpublish <package_name> -f

Isso removerá o pacote do registro do NPM se ele foi publicado há menos de 72 horas . Em seguida, você pode alterar o nome do seu pacote e publicá-lo novamente.

Cuidado: você precisa esperar 24 horas se tentar republicar um pacote com o mesmo nome

Nedko Dimitrov
fonte
8

Alguém construiu um pequeno plug-in npm útil para fazer isso facilmente 😊

https://www.npmjs.com/package/@tiaanduplessis/pkg-rename

  1. Instale o pacote usando npm -g install @tiaanduplessis/pkg-rename
  2. Renomeie seu módulo npm no arquivo package.json e salve-o
  3. corre pkg-rename old-package-name

Da documentação:

Isso obterá a versão mais recente do pacote antigo do npm e tornará obsoleto esta e todas as versões anteriores publicadas com uma mensagem:

WARNING: This project has been renamed to new-package-name. Install using new-package-name instead.

Você também pode adicionar o --publishsinalizador para publicar o novo nome do pacote como parte da mesma ação.

pkg-rename old-package-name --publish

Lembre-se, renomeie o pacote em package.json primeiro e , em seguida , execute o pkg-renamecomando.

Daniel Tonon
fonte
1
O npm deve ter um novo slogan: economizando tempo dos desenvolvedores de javascript como um serviço
r3wt
1
observe que pkg-rename não funciona se você tiver 2FA habilitado com npm
Shazron
3

Uma vez estive nesta situação. Publiquei um pacote com o nome em bowser-or-nodevez de browser-or-node.

Não há como renomear um pacote, você deve descontinuar e publicar um novo pacote.

Embora haja uma outra opção. Se você acabou de publicar seu pacote (menos de 24 horas após a publicação) e tem certeza de que está tudo bem para excluir o pacote e publicar um novo com o nome correto, você pode ir em frente e fazer isso. Mas o NPM não permitirá que você exclua o pacote, uma vez que já se passaram 24 horas desde o momento da publicação.

Felizmente descobri que publiquei com o nome errado em menos de 20 minutos. Então, acabei de deletar e publicar novamente com um novo nome.

Dinesh Pandiyan
fonte
Interessante, estou tentando fazer isso, mas recebo a mensagem "Nome do pacote muito semelhante aos pacotes existentes" - embora eu tenha acabado de excluir o antigo.
Steve Bennett
Oh, na verdade, no meu caso, a semelhança era com outro pacote, não o meu antigo.
Steve Bennett
-1

Algo maravilhoso acabou de acontecer comigo: consegui renomear um pacote. Ele era originalmente conhecido como stdout-renderer, mas mudei todas as ocorrências possíveis do nome e o republicei após ter descontinuado o original e pronto, ele aparece com seu novo nome (cli-artist) não substituído na lista recém-atualizada. Não tenho certeza de qual campo alterar, mas imagino que seja em package.json porque esse é o único em que o invólucro corresponde no meu caso.

espero que ajude!

Jacob Schneider
fonte