重命名已发布的 NPM 模块

Renaming a published NPM module

有什么方法可以重命名已经发布的 NPM 模块吗?我想更改我的模块的名称以更准确地匹配它公开的 API 但不想让已经安装它的人陷入困境。

没有任何公开的方法可以做到这一点。当我过去遇到这种情况时,我采取的方法是:

npm deprecate %ProjectName%@"<=put-latest-version-here" "WARNING: This project has been renamed to %NewProjectName%. Install using %NewProjectName% instead."

npm Deprecate instructions

简而言之,不,你不能。但是 npm 为您提供了一个不同的解决方案,称为 npm deprecate.

它的作用是将该软件包的特定版本或版本范围标记为已弃用。因此接下来,如果有人尝试安装此软件包,他们会收到警告 package deprecated 以及您的自定义消息,您可以在其中轻松指定新的软件包名称。

用法:

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-artist) undeprecated 出现在新更新的列表中。我不确定要更改哪个字段,但我想它会在 package.json 中,因为在我的情况下,这是唯一一个外壳匹配的字段。

希望对您有所帮助!

来自文档:

Registry data is immutable, meaning once published, a package cannot change. We do this for reasons of security and stability of the users who depend on those packages.

但是新发布的包 - 在 72 小时内 - 可以由 运行 取消发布:

npm unpublish <package_name> -f

如果包发布时间少于 72 小时,这将从 NPM 注册表中删除该包。然后你可以更改你的包的名称并重新发布它。

Caution: You need to wait 24 hours if you try to republish package with the same name

有人构建了一个方便的小 npm 插件来轻松地做到这一点

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

  1. 使用 npm -g install @tiaanduplessis/pkg-rename
  2. 安装包
  3. 重命名 package.json 文件中的 npm 模块并保存
  4. 运行 pkg-rename old-package-name

来自文档:

This will get the latest version of the old package from npm and deprecate this and all previous published versions with a message:

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 first, then 运行 the pkg-rename 重命名包命令。