重命名发布的 NPM 模块

有没有办法重命名已经发布的 NPM 模块?我想更改我的模块的名称,以便更准确地匹配它所暴露的 API,但不想让已经安装了它的人陷入困境。

38760 次浏览

There isn't any exposed way to do that. When I've encountered this in the past the approach I took was:

Npm 不赞成% ProjectName%@“ < = put-best-version-here”“警告: 此项目已重命名为% NewProjectName% 。改为使用% NewProjectName% 安装。”

npm Deprecate instructions

简单地说,不可以。但是 npm 提供了一种称为 npm deprecate的不同解决方案。

它所做的是将该包的特定版本或版本范围标记为不推荐的。因此,接下来如果有人试图安装这个包,他们会得到一个警告包,它与您的自定义消息一起被弃用,您可以在其中轻松地指定您的新包名称。

Usage:

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.

我曾经遇到过这种情况,我发布了一个名为 bowser-or-node而不是 browser-or-node的包。

没有办法重命名一个包,你必须废弃和发布一个新的包。

不过还有一个选择。如果您刚刚发布了您的软件包(从发布时间起不到24小时) ,并且确定您可以删除该软件包并发布一个具有正确名称的新软件包,那么您可以继续这样做。但是 NPM 不允许在发布后24小时内删除软件包。

幸运的是,我在不到20分钟的时间里就发现自己用错了名字。所以我就删了,然后用新名字发表了。

在不到24小时,我运行下面的命令,删除错误的包。

npm unpublish <wrong package name> --force

刚刚发生了一件不可思议的事情: 我设法重命名了一个包。它最初被称为 stdout-renderer,但是我改变了这个名字的所有可能出现的地方,并且在弃用了原来的名字之后重新发布了它,瞧,它在新更新的列表中出现在了它的新名字(cli-Artister)下,而且没有弃用。我不确定要更改哪个字段,但我可以想象它在 package.json 中,因为在我的案例中,这是唯一一个与外壳匹配的字段。

希望能帮上忙!

From the documentation:

注册表数据是不可变的,这意味着一旦发布,包就不能 我们这样做是为了用户的安全性和稳定性 依赖那些包裹的人。

然而,新发布的软件包——在 72 hours内——可以通过运行以下命令而不发布:

npm unpublish <package_name> -f

如果该包在不到 72小时之前发布,那么它将从 NPM 注册中心移除。然后您可以更改包的名称并再次发布它。

注意: 如果您尝试重新发布软件包,则需要等待24小时 同一个名字

Someone has built a handy little npm plugin for doing this easily 😊

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命令。