すでに公開されているNPMモジュールの名前を変更する方法はありますか?モジュールの名前を変更して、公開するAPIとより正確に一致させたいが、すでにモジュールをインストールしている人を常駐させたくない。
回答:
それを行うための公開された方法はありません。私が過去にこれに遭遇したとき、私が取ったアプローチは:
npm deprecate%ProjectName%@ "<= put-latest-version-here" "警告:このプロジェクトは%NewProjectName%に名前が変更されました。代わりに%NewProjectName%を使用してインストールしてください。"
簡単に言えば、できません。しかし、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.
24時間以内に次のコマンドを実行して、間違ったパッケージを削除しました。
npm unpublish <wrong package name> --force
ドキュメントから:
レジストリデータは不変です。つまり、いったん公開されると、パッケージは変更できません。これは、これらのパッケージに依存するユーザーのセキュリティと安定性の理由から行っています。
ただし、新しく公開されたパッケージ(72時間以内)は、次のコマンドを実行して非公開にすることができます。
npm unpublish <package_name> -f
72時間以内に公開されたパッケージは、NPMレジストリから削除されます。その後、パッケージの名前を変更して、再度公開できます。
注意:同じ名前のパッケージを再公開しようとすると、24時間待つ必要があります
誰かがこれを簡単に行うための便利な小さなnpmプラグインを作成しました😊
https://www.npmjs.com/package/@tiaanduplessis/pkg-rename
npm -g install @tiaanduplessis/pkg-rename
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
コマンドを。
私はかつてこのような状況にありました。私は名前のパッケージを発表bowser-or-node
代わりにbrowser-or-node
。
パッケージの名前を変更する方法はありません。新しいパッケージを非推奨にして公開する必要があります。
他に1つのオプションがありますが。パッケージを公開した直後(公開時から24時間未満)で、パッケージを削除して正しい名前で新しいパッケージを公開してもよい場合は、先に進んでそれを実行できます。ただし、NPMでは、公開時から24時間後にパッケージを削除することはできません。
幸いにも、20分以内に間違った名前で公開したことがわかりました。削除して、新しい名前で再度公開しました。
驚異的なことが起こりました。パッケージの名前を変更することができました。元々はstdout-rendererと呼ばれていましたが、可能な限りすべての名前を変更し、オリジナルを非推奨にしてから再発行し、新しく更新されたリストでは非推奨ではない新しい名前(cli-artist)で表示されます。変更するフィールドはわかりませんが、package.jsonにあると思います。これは、私のケースで大文字と小文字が一致する唯一のフィールドであるためです。
お役に立てば幸いです。
<=
よりも<
、おそらく使用する方が良いでしょうか?