重命名已发布的NPM模块


94

是否可以重命名已发布的NPM模块?我想更改模块的名称,使其更准确地匹配它所公开的API,但不想让已经安装了该模块的人陷入困境。

Answers:


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
最好使用<=而不是<通知最新版本?
David Sherret


10

从文档中:

注册表数据是不可变的,这意味着一旦发布,程序包就无法更改。我们这样做是出于依赖那些软件包的用户的安全性和稳定性的考虑。

但是,可以通过运行以下命令取消发布新发布的软件包(在72小时之内):

npm unpublish <package_name> -f

如果该软件包发布的时间少于72小时,则会从NPM注册表中删除该软件包。然后,您可以更改包的名称,然后再次发布。

注意:如果您尝试重新发布具有相同名称的软件包,则需要等待24小时


8

有人构建了一个方便的小npm插件来轻松执行此操作😊

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

  1. 使用以下方法安装软件包 npm -g install @tiaanduplessis/pkg-rename
  2. 在package.json文件中重命名您的npm模块并将其保存
  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
请注意,如果通过npm启用了2FA,则pkg-rename不起作用
Shazron

3

我曾经处于这种情况。我发布了一个名称为bowser-or-node而不是的软件包browser-or-node

无法重命名程序包,您必须弃用并发布新程序包。

尽管还有另一种选择。如果您刚刚发布了软件包(距离发布时间不到24小时),并且确定可以删除该软件包并以正确的名称发布一个新软件包,则可以继续进行。但是自发布之日起24小时后,NPM将不允许您删除该软件包。

幸运的是,我发现我在不到20分钟的时间内发布了错误的名字。因此,我刚刚删除并以新名称再次发布。


有趣的是,我正在尝试这样做,但是我被告知“软件包名称与现有软件包太相似”,尽管我只是删除了旧的软件包。
史蒂夫·贝内特

哦,实际上,对于我来说,相似之处是与另一个软件包,而不是我的旧软件包。
史蒂夫·贝内特

-1

我刚发生了一件奇妙的事情:我设法重命名了一个程序包。它最初被称为stdout-renderer,但我更改了该名称的所有可能出现的位置,并在弃用了原始名称后重新发布了该名称,并以新名称(cli-artist)显示在新更新的列表中,不再使用。我不确定要更改哪个字段,但是我可以想象它在package.json中,因为在我的情况下,这是唯一匹配大小写的字段。

希望有帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.