Cambiar el nombre de un módulo NPM publicado

94

¿Existe alguna forma de cambiar el nombre de un módulo NPM que ya se ha publicado? Quiero cambiar el nombre de mi módulo para que coincida con más precisión con la API que expone, pero no me gustaría dejar en la estacada a las personas que ya lo han instalado.

thekevinscott
fuente

Respuestas:

123

No hay ninguna forma expuesta de hacer eso. Cuando me encontré con esto en el pasado, el enfoque que tomé fue:

npm deprecate% ProjectName% @ "<= put-latest-version-here" "ADVERTENCIA: Este proyecto ha sido renombrado a% NewProjectName%. Instale usando% NewProjectName% en su lugar."

npm Dar de baja instrucciones

Peter Flannery
fuente
18

En palabras simples, no, no puedes. Pero npm le proporciona una solución diferente llamada npm deprecate.

Lo que hace es marcar una versión particular o rangos de versiones de ese paquete como obsoletos. Entonces, si alguien intenta instalar este paquete, recibe un paquete de advertencia en desuso junto con su mensaje personalizado, en el que puede especificar fácilmente su nuevo nombre de paquete.

Uso:

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

Su mensaje puede ser cualquier cosa como:

WARNING: This project has been renamed to your-new-package-name. Install using new-package-name instead.
Ujjwal
fuente
1
¿Probablemente sea mejor usar en <=lugar de <notificar la última versión también?
David Sherret
14

En menos de 24 horas ejecuté el siguiente comando para eliminar el paquete incorrecto.

npm unpublish <wrong package name> --force
Jeque Abdul Wahid
fuente
Sí, esto funciona si el paquete se acaba de publicar (menos de 24 horas)
Moso Akinyemi
10

De la documentación:

Los datos del registro son inmutables, lo que significa que una vez publicados, un paquete no puede cambiar. Hacemos esto por razones de seguridad y estabilidad de los usuarios que dependen de esos paquetes.

Sin embargo, los paquetes recién publicados (dentro de las 72 horas ) se pueden anular ejecutando:

npm unpublish <package_name> -f

Esto eliminará el paquete del registro de NPM si se publicó hace menos de 72 horas . Luego, puede cambiar el nombre de su paquete y publicarlo nuevamente.

Precaución: debe esperar 24 horas si intenta volver a publicar el paquete con el mismo nombre

Nedko Dimitrov
fuente
8

Alguien ha creado un pequeño y práctico complemento npm para hacer esto fácilmente 😊

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

  1. Instale el paquete usando npm -g install @tiaanduplessis/pkg-rename
  2. Cambie el nombre de su módulo npm en el archivo package.json y guárdelo
  3. correr pkg-rename old-package-name

De la documentación:

Esto obtendrá la última versión del paquete anterior de npm y desaprobará esta y todas las versiones publicadas anteriores con un mensaje:

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

También puede agregar la --publishbandera para publicar el nuevo nombre del paquete como parte de la misma acción.

pkg-rename old-package-name --publish

Recuerde, primero cambie el nombre del paquete en package.json y luego ejecute el pkg-renamecomando.

Daniel Tonon
fuente
1
npm debería tener un nuevo lema: ahorrar tiempo a los desarrolladores de JavaScript como servicio
r3wt
1
tenga en cuenta que pkg-rename no funciona si tiene 2FA habilitado con npm
Shazron
3

Una vez estuve en esta situación. Publiqué un paquete con el nombre en bowser-or-nodelugar de browser-or-node.

No hay forma de cambiar el nombre de un paquete, debe desaprobar y publicar un nuevo paquete.

Aunque hay otra opción. Si acaba de publicar su paquete (menos de 24 horas desde el momento de la publicación) y si está seguro de que está de acuerdo con eliminar el paquete y publicar uno nuevo con el nombre correcto, puede continuar y hacerlo. Pero NPM no le permitirá eliminar el paquete una vez que hayan pasado 24 horas desde el momento de la publicación.

Afortunadamente, descubrí que publiqué con el nombre equivocado en menos de 20 minutos. Así que eliminé y publiqué nuevamente con un nuevo nombre.

Dinesh Pandiyan
fuente
Interesante, estoy tratando de hacer eso, pero me dicen "El nombre del paquete es demasiado similar a los paquetes existentes", aunque acabo de eliminar el anterior.
Steve Bennett
Oh, de hecho, en mi caso, la similitud fue con otro paquete, no con el anterior.
Steve Bennett
-1

Me acaba de pasar algo maravilloso: logré cambiar el nombre de un paquete. Originalmente se conocía como stdout-renderer, pero cambié cada posible aparición del nombre, y lo volví a publicar después de haber desaprobado el original y listo, aparece con su nuevo nombre (cli-artist) sin predecir en la lista recién actualizada. No estoy seguro de qué campo cambiar, pero me imagino que estaría en package.json porque ese es el único en el que la carcasa coincide en mi caso.

¡Espero que ayude!

Jacob Schneider
fuente