Mengganti nama modul NPM yang diterbitkan

97

Apakah ada cara untuk mengganti nama modul NPM yang telah diterbitkan? Saya ingin mengubah nama modul saya agar lebih cocok dengan API yang diekspos tetapi tidak ingin membiarkan orang yang telah menginstalnya dalam kesulitan.

thekevinscott
sumber

Jawaban:

125

Tidak ada cara untuk melakukan itu. Ketika saya mengalami ini di masa lalu, pendekatan yang saya ambil adalah:

npm deprecate% ProjectName% @ "<= put-latest-version-here" "PERINGATAN: Proyek ini telah diganti namanya menjadi% NewProjectName%. Instal menggunakan% NewProjectName% sebagai gantinya."

npm Menghentikan instruksi

Peter Flannery
sumber
19

Dengan kata sederhana tidak, Anda tidak bisa. Tetapi npm memberi Anda solusi berbeda yang disebut npm deprecate.

Apa yang dilakukannya adalah menandai versi atau rentang versi tertentu dari paket itu sebagai usang. Jadi selanjutnya jika seseorang mencoba menginstal paket ini, mereka mendapatkan paket peringatan yang tidak digunakan lagi bersama dengan pesan kustom Anda, di mana Anda dapat dengan mudah menentukan nama paket baru Anda.

Pemakaian:

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

Pesan Anda bisa berupa:

WARNING: This project has been renamed to your-new-package-name. Install using new-package-name instead.
Ujjwal
sumber
1
Mungkin lebih baik digunakan <=daripada <memberi tahu versi terbaru juga?
David Sherret
15

Dalam waktu kurang dari 24 jam saya menjalankan perintah berikut untuk menghapus paket yang salah.

npm unpublish <wrong package name> --force
Sheikh Abdul Wahid
sumber
Ya, ini berfungsi jika paket baru saja diterbitkan (di bawah 24 jam)
Moso Akinyemi
11

Dari dokumentasi:

Data registri tidak dapat diubah, artinya setelah dipublikasikan, paket tidak dapat diubah. Kami melakukan ini untuk alasan keamanan dan stabilitas pengguna yang bergantung pada paket tersebut.

Namun paket yang baru diterbitkan - dalam 72 jam - dapat dibatalkan publikasinya dengan menjalankan:

npm unpublish <package_name> -f

Ini akan menghapus paket dari registri NPM jika diterbitkan kurang dari 72 jam yang lalu. Kemudian Anda dapat mengubah nama paket Anda dan menerbitkannya lagi.

Perhatian: Anda harus menunggu 24 jam jika Anda mencoba menerbitkan ulang paket dengan nama yang sama

Nedko Dimitrov
sumber
10

Seseorang telah membuat plugin npm kecil yang berguna untuk melakukan ini dengan mudah 😊

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

  1. Instal paket menggunakan npm -g install @tiaanduplessis/pkg-rename
  2. Ubah nama modul npm Anda di file package.json dan simpan
  3. Lari pkg-rename old-package-name

Dari dokumentasi:

Ini akan mendapatkan versi terbaru dari paket lama dari npm dan menghentikan ini dan semua versi yang diterbitkan sebelumnya dengan pesan:

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

Anda juga dapat menambahkan --publishbendera untuk menerbitkan nama paket baru sebagai bagian dari tindakan yang sama.

pkg-rename old-package-name --publish

Ingat, ganti nama paket di package.json terlebih dahulu , lalu jalankan pkg-renameperintah.

Daniel Tonon
sumber
1
npm harus memiliki slogan baru: menghemat waktu pengembang javascript sebagai layanan
r3wt
1
perhatikan bahwa pkg-rename tidak berfungsi jika Anda mengaktifkan 2FA dengan npm
Shazron
3

Saya pernah berada dalam situasi ini. Saya menerbitkan paket dengan nama, bowser-or-nodebukan browser-or-node.

Tidak ada cara untuk mengganti nama paket, Anda harus menghentikan dan menerbitkan paket baru.

Meski ada satu opsi lain. Jika Anda baru saja mempublikasikan paket Anda (kurang dari 24 jam dari waktu publikasi) dan jika Anda yakin tidak masalah dengan menghapus paket dan mempublikasikan yang baru dengan nama yang benar, Anda dapat melanjutkan dan melakukannya. Tetapi NPM tidak akan mengizinkan Anda untuk menghapus paket setelah 24 jam sejak waktu publikasi.

Untungnya saya menemukan bahwa saya menerbitkan dengan nama yang salah dalam waktu kurang dari 20 menit. Jadi saya baru saja menghapus dan menerbitkan lagi dengan nama baru.

Dinesh Pandiyan
sumber
Menarik, saya mencoba melakukan itu tetapi saya diberi tahu "Nama paket terlalu mirip dengan paket yang ada" - meskipun saya baru saja menghapus yang lama.
Steve Bennett
Oh sebenarnya dalam kasus saya, kesamaannya adalah dengan paket lain, bukan paket lama saya.
Steve Bennett
-1

Sesuatu yang luar biasa baru saja terjadi pada saya: Saya berhasil mengganti nama paket. Ini pada awalnya dikenal sebagai stdout-renderer, tetapi saya mengubah setiap kemungkinan kemunculan nama, dan menerbitkannya kembali setelah tidak menggunakan aslinya dan voila itu muncul dengan nama barunya (cli-artist) tidak berlaku lagi dalam daftar yang baru diperbarui. Saya tidak yakin bidang mana yang harus diubah, tetapi saya membayangkannya ada di package.json karena hanya itu yang casingnya cocok dengan kasus saya.

semoga membantu!

Jacob Schneider
sumber