การเปลี่ยนชื่อโมดูล NPM ที่เผยแพร่


97

มีวิธีใดในการเปลี่ยนชื่อโมดูล NPM ที่เผยแพร่ไปแล้วหรือไม่? ฉันต้องการเปลี่ยนชื่อโมดูลของฉันให้ตรงกับ API ที่เปิดเผยมากขึ้น แต่ไม่ต้องการปล่อยให้คนที่ติดตั้งไปแล้วไม่อยู่กับร่องกับรอย

คำตอบ:


125

ไม่มีวิธีเปิดเผยใด ๆ ในการทำเช่นนั้น เมื่อฉันพบสิ่งนี้ในอดีตแนวทางที่ฉันทำคือ:

npm เลิกใช้% ProjectName% @ "<= put-latest-version-here" "คำเตือน: โปรเจ็กต์นี้ถูกเปลี่ยนชื่อเป็น% NewProjectName% ติดตั้งโดยใช้% NewProjectName% แทน"

npm เลิกใช้คำแนะนำ


19

พูดง่ายๆว่าคุณทำไม่ได้ แต่ NPM npm deprecateให้คุณแก้ปัญหาที่แตกต่างกันเรียกว่า

สิ่งที่ทำคือทำเครื่องหมายเวอร์ชันเฉพาะหรือช่วงเวอร์ชันของแพ็กเกจนั้นว่าเลิกใช้งานแล้ว ถัดไปหากมีคนพยายามติดตั้งแพ็กเกจนี้พวกเขาจะได้รับคำเตือนแพ็กเกจเลิกใช้พร้อมกับข้อความที่คุณกำหนดเองซึ่งคุณสามารถระบุชื่อแพ็กเกจใหม่

การใช้งาน:

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

ข้อความของคุณอาจเป็นอะไรก็ได้เช่น:

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

1
มันอาจจะดีกว่าการใช้<=มากกว่า<เพื่อที่จะแจ้งให้สำหรับรุ่นล่าสุดเกินไป?
David Sherret

15

ในเวลาน้อยกว่า 24 ชั่วโมงฉันใช้คำสั่งต่อไปนี้เพื่อลบแพ็คเกจที่ไม่ถูกต้อง

npm unpublish <wrong package name> --force

ใช่มันใช้งานได้ถ้าแพ็คเกจเพิ่งเผยแพร่ (ต่ำกว่า 24 ชั่วโมง)
Moso Akinyemi

11

จากเอกสารประกอบ:

ข้อมูลรีจิสทรีไม่เปลี่ยนรูปซึ่งหมายความว่าเมื่อเผยแพร่แล้วแพ็คเกจจะไม่สามารถเปลี่ยนแปลงได้ เราทำสิ่งนี้ด้วยเหตุผลด้านความปลอดภัยและความเสถียรของผู้ใช้ที่ขึ้นอยู่กับแพ็คเกจเหล่านั้น

อย่างไรก็ตามแพ็คเกจที่เผยแพร่ใหม่ - ภายใน72 ชั่วโมง - สามารถยกเลิกการเผยแพร่ได้โดยเรียกใช้:

npm unpublish <package_name> -f

การดำเนินการนี้จะลบแพ็คเกจออกจากรีจิสทรี NPM หากมีการเผยแพร่น้อยกว่า72 ชั่วโมงที่ผ่านมา จากนั้นคุณสามารถเปลี่ยนชื่อแพ็กเกจของคุณและเผยแพร่อีกครั้ง

ข้อควรระวัง: คุณต้องรอ 24 ชั่วโมงหากคุณพยายามเผยแพร่แพ็คเกจที่มีชื่อเดียวกันอีกครั้ง


10

มีคนสร้างปลั๊กอิน npm เล็ก ๆ ที่มีประโยชน์สำหรับทำสิ่งนี้ได้อย่างง่ายดาย😊

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

  1. ติดตั้งแพคเกจโดยใช้ npm -g install @tiaanduplessis/pkg-rename
  2. เปลี่ยนชื่อโมดูล npm ของคุณในไฟล์ package.json และบันทึก
  3. วิ่ง pkg-rename old-package-name

จากเอกสารประกอบ:

สิ่งนี้จะได้รับแพคเกจเก่าเวอร์ชันล่าสุดจาก npm และเลิกใช้งานสิ่งนี้และเวอร์ชันที่เผยแพร่ก่อนหน้าทั้งหมดพร้อมข้อความ:

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

คุณยังสามารถเพิ่ม--publishแฟล็กเพื่อเผยแพร่ชื่อแพ็กเกจใหม่โดยเป็นส่วนหนึ่งของการดำเนินการเดียวกัน

pkg-rename old-package-name --publish

โปรดจำไว้ว่าการเปลี่ยนชื่อแพคเกจใน package.json แรก , แล้วเรียกใช้pkg-renameคำสั่ง


1
npm ควรมีสโลแกนใหม่: ประหยัดเวลาในการให้บริการของนักพัฒนาจาวาสคริปต์
r3wt

1
โปรดทราบว่าการเปลี่ยนชื่อ pkg จะไม่ทำงานหากคุณเปิดใช้งาน 2FA ด้วย npm
Shazron

3

ครั้งหนึ่งฉันเคยอยู่ในสถานการณ์เช่นนี้ ฉันเผยแพร่แพ็คเกจที่มีชื่อbowser-or-nodeแทนbrowser-or-node.

ไม่มีวิธีเปลี่ยนชื่อแพ็กเกจคุณต้องเลิกใช้งานและเผยแพร่แพ็กเกจใหม่

แม้ว่าจะมีทางเลือกอื่น หากคุณเพิ่งเผยแพร่แพ็กเกจของคุณ (น้อยกว่า 24 ชั่วโมงนับจากเวลาที่เผยแพร่) และหากแน่ใจว่าคุณสามารถลบแพ็กเกจและเผยแพร่แพ็กเกจใหม่โดยใช้ชื่อที่ถูกต้องคุณสามารถดำเนินการต่อได้ แต่ NPM จะไม่อนุญาตให้คุณลบแพ็กเกจเมื่อผ่านไป 24 ชั่วโมงนับตั้งแต่เวลาเผยแพร่

โชคดีที่ฉันพบว่าฉันเผยแพร่ชื่อผิดในเวลาไม่ถึง 20 นาที ผมจึงเพิ่งลบและเผยแพร่อีกครั้งด้วยชื่อใหม่


น่าสนใจฉันกำลังพยายามทำ แต่ได้รับแจ้งว่า "ชื่อแพ็กเกจคล้ายกับแพ็กเกจที่มีอยู่" แม้ว่าฉันจะเพิ่งลบแพ็กเกจเก่าไปก็ตาม
Steve Bennett

โอ้จริงๆแล้วในกรณีของฉันความคล้ายคลึงกันคือกับแพ็คเกจอื่นไม่ใช่ของฉันเก่า
Steve Bennett

-1

มีบางอย่างที่น่าอัศจรรย์เกิดขึ้นกับฉัน: ฉันสามารถเปลี่ยนชื่อแพ็คเกจได้ เดิมเป็นที่รู้จักกันในชื่อ stdout-renderer แต่ฉันเปลี่ยนทุกครั้งที่เป็นไปได้ของชื่อและเผยแพร่ซ้ำหลังจากเลิกใช้งานต้นฉบับแล้วและ voila จะปรากฏภายใต้ชื่อใหม่ (cli-artist) ซึ่งไม่ได้รับการสนับสนุนในรายการที่อัปเดตใหม่ ฉันไม่แน่ใจว่าจะเปลี่ยนช่องไหน แต่ฉันคิดว่ามันอยู่ใน package.json เพราะนั่นเป็นช่องเดียวที่ปลอกตรงกับกรณีของฉัน

หวังว่าจะช่วยได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.