【发布时间】:2019-05-18 16:45:11
【问题描述】:
有没有办法重命名已经发布的 NPM 模块?我想更改我的模块的名称以更准确地匹配它公开的 API,但不想让已经安装它的人陷入困境。
【问题讨论】:
标签: npm
有没有办法重命名已经发布的 NPM 模块?我想更改我的模块的名称以更准确地匹配它公开的 API,但不想让已经安装它的人陷入困境。
【问题讨论】:
标签: npm
【讨论】:
简单来说,不,你不能。但是 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
【讨论】:
有人构建了一个方便的小 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 命令。
【讨论】:
来自文档:
注册表数据是不可变的,这意味着一旦发布,包就不能 改变。我们这样做是为了用户的安全和稳定性 谁依赖这些包。
但是,新发布的包 - 在 72 小时内 - 可以通过运行以下命令取消发布:
npm unpublish <package_name> -f
如果软件包发布时间少于 72 小时,这将从 NPM 注册表中删除该软件包。然后,您可以更改包的名称并再次发布。
注意:如果您尝试重新发布包,则需要等待 24 小时 同名
【讨论】:
我曾经遇到过这种情况。我发布了一个名为 bowser-or-node 而不是 browser-or-node 的包。
无法重命名包,您必须弃用并发布新包。
虽然还有另一种选择。如果您刚刚发布了您的包(距发布时间不到 24 小时)并且您确定可以删除该包并发布一个具有正确名称的新包,您可以继续执行此操作。但 NPM 将不允许您在发布后 24 小时后删除该包。
幸运的是,我在不到 20 分钟的时间内发现我用错误的名称发表了文章。所以我只是删除并重新发布了一个新名称。
【讨论】:
一件奇妙的事情发生在我身上:我设法重命名了一个包。它最初被称为 stdout-renderer,但我更改了所有可能出现的名称,并在弃用原始名称后重新发布它,瞧,它以新名称(cli-artist)出现在新更新的列表中,未弃用。我不确定要更改哪个字段,但我想它在 package.json 中,因为这是我的案例中唯一匹配大小写的字段。
希望有帮助!
【讨论】: