Ridenominazione di un modulo NPM pubblicato


95

C'è un modo per rinominare un modulo NPM che è già stato pubblicato? Voglio cambiare il nome del mio modulo per abbinare più accuratamente l'API che espone, ma non vorrei lasciare le persone che lo hanno già installato nei guai.

Risposte:


123

Non c'è alcun modo esposto per farlo. Quando l'ho riscontrato in passato, l'approccio che ho seguito è stato:

npm deprecate% ProjectName% @ "<= put-latest-version-here" "ATTENZIONE: questo progetto è stato rinominato% NewProjectName%. Installa invece% NewProjectName%."

npm Istruzioni deprecate


18

In parole semplici no non puoi. Ma npm ti fornisce una soluzione diversa chiamata npm deprecate.

Quello che fa è contrassegnare una particolare versione o intervalli di versioni di quel pacchetto come deprecati. Quindi, se qualcuno tenta di installare questo pacchetto, riceve un pacchetto di avviso deprecato insieme al messaggio personalizzato, in cui è possibile specificare facilmente il nuovo nome del pacchetto.

Utilizzo:

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

Il tuo messaggio può essere qualsiasi cosa come:

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

1
Probabilmente è meglio usare <=piuttosto che in <modo che notifica anche l'ultima versione?
David Sherret

14

In meno di 24 ore ho eseguito il seguente comando per eliminare il pacchetto sbagliato.

npm unpublish <wrong package name> --force

Sì, funziona se il pacchetto è stato appena pubblicato (meno di 24 ore)
Moso Akinyemi

10

Dalla documentazione:

I dati del registro sono immutabili, il che significa che una volta pubblicato, un pacchetto non può cambiare. Lo facciamo per motivi di sicurezza e stabilità degli utenti che dipendono da quei pacchetti.

Tuttavia, i pacchetti appena pubblicati - entro 72 ore - possono essere annullati eseguendo:

npm unpublish <package_name> -f

Questo rimuoverà il pacchetto dal registro di NPM se è stato pubblicato meno di 72 ore fa. Quindi puoi cambiare il nome del tuo pacchetto e pubblicarlo di nuovo.

Attenzione: è necessario attendere 24 ore se si tenta di ripubblicare il pacchetto con lo stesso nome


8

Qualcuno ha creato un pratico piccolo plugin per npm per farlo facilmente 😊

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

  1. Installa il pacchetto usando npm -g install @tiaanduplessis/pkg-rename
  2. Rinomina il tuo modulo npm nel file package.json e salvalo
  3. correre pkg-rename old-package-name

Dalla documentazione:

Questo otterrà l'ultima versione del vecchio pacchetto da npm e deprecerà questa e tutte le versioni precedenti pubblicate con un messaggio:

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

È inoltre possibile aggiungere il --publishflag per pubblicare il nuovo nome del pacchetto come parte della stessa azione.

pkg-rename old-package-name --publish

Ricordate, rinominare il pacchetto in package.json prima , quindi eseguire il pkg-renamecomando.


1
npm dovrebbe avere un nuovo slogan: risparmiare tempo per gli sviluppatori javascript come servizio
r3wt

1
nota che pkg-rename non funziona se hai 2FA abilitato con npm
Shazron

3

Una volta ero in questa situazione. Ho pubblicato un pacchetto con il nome bowser-or-nodeinvece di browser-or-node.

Non c'è modo di rinominare un pacchetto, devi deprecare e pubblicare un nuovo pacchetto.

Sebbene ci sia un'altra opzione. Se hai appena pubblicato il tuo pacchetto (meno di 24 ore dal momento della pubblicazione) e se sei sicuro di essere d'accordo con l'eliminazione del pacchetto e pubblicarne uno nuovo con il nome giusto, puoi andare avanti e farlo. Ma NPM non ti consentirà di eliminare il pacchetto una volta che sono trascorse 24 ore dal momento della pubblicazione.

Per fortuna ho scoperto di aver pubblicato con il nome sbagliato in meno di 20 minuti. Quindi ho appena cancellato e pubblicato di nuovo con un nuovo nome.


Interessante, sto provando a farlo ma mi viene detto "Nome del pacchetto troppo simile ai pacchetti esistenti", anche se ho appena cancellato quello vecchio.
Steve Bennett

Oh in realtà nel mio caso, la somiglianza era con un altro pacchetto, non con il mio vecchio.
Steve Bennett

-1

Mi è appena successo qualcosa di meraviglioso: sono riuscito a rinominare un pacchetto. Originariamente era noto come stdout-renderer, ma ho cambiato ogni possibile occorrenza del nome e l'ho ripubblicato dopo aver deprecato l'originale e voilà si presenta con il suo nuovo nome (cli-artist) non deprecato nell'elenco appena aggiornato. Non sono sicuro di quale campo cambiare, ma immagino che sia in package.json perché è l'unico in cui il case corrispondeva nel mio caso.

spero che aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.