是否可以重命名已发布的NPM模块?我想更改模块的名称,使其更准确地匹配它所公开的API,但不想让已经安装了该模块的人陷入困境。
Answers:
简而言之,不,您不能。但是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
。
无法重命名程序包,您必须弃用并发布新程序包。
尽管还有另一种选择。如果您刚刚发布了软件包(距离发布时间不到24小时),并且确定可以删除该软件包并以正确的名称发布一个新软件包,则可以继续进行。但是自发布之日起24小时后,NPM将不允许您删除该软件包。
幸运的是,我发现我在不到20分钟的时间内发布了错误的名字。因此,我刚刚删除并以新名称再次发布。
<=
而不是<
通知最新版本?