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

97

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

Thekevinscott
источник

Ответы:

125

Нет никакого открытого способа сделать это. Когда я сталкивался с этим в прошлом, я использовал следующий подход:

npm deprecate% 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
Наверное, лучше использовать <=, чем <чтобы он тоже уведомлял о последней версии?
Дэвид Шеррет
15

Менее чем за 24 часа я выполнил следующую команду, чтобы удалить неправильный пакет.

npm unpublish <wrong package name> --force
Шейх Абдул Вахид
источник
Да, это работает, если пакет был только что опубликован (менее 24 часов)
Мосо Акинеми
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 должен быть новый слоган: экономия времени разработчиков javascript как услуга
r3wt,
1
обратите внимание, что pkg-rename не работает, если у вас включена
двухфакторная аутентификация
3

Однажды я был в такой ситуации. Я опубликовал пакет с названием bowser-or-nodeвместо browser-or-node.

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

Хотя есть еще один вариант. Если вы только что опубликовали свой пакет (менее 24 часов с момента публикации) и если вы уверены, что согласны с удалением пакета и публикацией нового с правильным именем, вы можете сделать это. Но NPM не позволит вам удалить пакет, если с момента публикации прошло 24 часа.

К счастью, я понял, что опубликовал статью с неправильным именем менее чем за 20 минут. Поэтому я просто удалил и снова опубликовал под новым именем.

Динеш Пандиян
источник
Интересно, что я пытаюсь это сделать, но мне говорят: «Имя пакета слишком похоже на существующие пакеты», хотя я только что удалил старый.
Стив Беннетт
На самом деле в моем случае сходство было с другим пакетом, а не с моим старым.
Стив Беннетт
-1

Со мной случилось что-то чудесное: мне удалось переименовать пакет. Первоначально он был известен как stdout-renderer, но я изменил все возможные варианты имени и повторно опубликовал его после того, как устарел оригинал, и вуаля он отображается под своим новым именем (cli-artist), не рекомендованным во вновь обновленном списке. Я не уверен, какое поле нужно изменить, но я бы предположил, что это будет в package.json, потому что это единственное поле, для которого в моем случае подходит корпус.

надеюсь, это поможет!

Якоб Шнайдер
источник