Перейменування опублікованого модуля NPM


94

Чи є спосіб перейменувати вже опублікований модуль NPM? Я хочу змінити назву свого модуля, щоб більш точно відповідати API, який він виставляє, але я не хотів би залишати людей, які вже встановили його, на недолік.

Відповіді:


123

Не існує жодного відкритого способу зробити це. Коли я стикався з цим у минулому, підхід, який я застосовував, був:

npm припинить% ProjectName% @ "<= put-latest-version-here" "ПОПЕРЕДЖЕННЯ: Цей проект було перейменовано на% NewProjectName%. Натомість встановіть, використовуючи% NewProjectName%."

npm Заборонити інструкції


18

Простими словами ні, ви не можете. Але 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
Ймовірно, краще використовувати, <=а не <так, щоб він також повідомляв про останню версію?
Девід Шеррет, 02

14

Менш ніж за 24 години я запустив наступну команду, щоб видалити неправильний пакет.

npm unpublish <wrong package name> --force

Так, це працює, якщо пакет щойно був опублікований (до 24 годин)
Moso Akinyemi

10

З документації:

Дані реєстру є незмінними, тобто після публікації пакет не може змінитися. Ми робимо це з міркувань безпеки та стабільності користувачів, які залежать від цих пакетів.

Однак нещодавно опубліковані пакети - протягом 72 годин - можуть бути опубліковані, запустивши:

npm unpublish <package_name> -f

Це видалить пакет із реєстру NPM, якщо він був опублікований менше 72 годин тому. Тоді ви можете змінити назву пакета та опублікувати його знову.

Увага: Вам потрібно почекати 24 години, якщо Ви намагаєтесь перевидати публікацію з тим самим ім'ям


8

Хтось створив зручний маленький плагін npm для цього легко doing

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 повинен мати новий слоган: економити час розробників javascript як послугу
r3wt

1
зверніть увагу, що pkg-rename не працює, якщо у вас увімкнено 2FA з npm
Shazron,

3

Я колись опинився в такій ситуації. Я опублікував пакет із назвою bowser-or-nodeзамість browser-or-node.

Немає можливості перейменувати пакет, вам доведеться припинити та опублікувати новий пакет.

Хоча є ще один варіант. Якщо ви щойно опублікували свій пакет (менш ніж за 24 години з моменту публікації), і якщо ви впевнені, що ви можете видалити пакет і опублікувати новий із правильним ім'ям, ви можете продовжити це робити. Але NPM не дозволить вам видалити пакет, коли минуло 24 години з часу публікації.

На щастя, я зрозумів, що опублікував з неправильним ім'ям менше ніж за 20 хвилин. Тому я просто видалив та опублікував знову з новою назвою.


Цікаво, я намагаюся це зробити, але мені повідомляють "Назва пакета занадто схожа на існуючі пакунки" - хоча я щойно видалив старий.
Стів Беннетт,

О насправді в моєму випадку подібність була до іншого пакету, а не до мого старого.
Стів Беннетт,

-1

Щось дивовижне зі мною сталося: мені вдалося перейменувати пакет. Спочатку він був відомий як stdout-renderer, але я змінив усі можливі випадки назви та повторно опублікував його після того, як застарів оригінал і вуаля, який він відображається під своїм новим іменем (cli-artist), не застарілий у нещодавно оновленому списку. Я не впевнений, яке поле змінити, але я міг би уявити, що воно буде в package.json, тому що це єдине, де в моєму випадку відповідає кожух.

сподіваюся, що допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.