【问题标题】:Renaming a published NPM module重命名已发布的 NPM 模块
【发布时间】:2019-05-18 16:45:11
【问题描述】:

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

【问题讨论】:

    标签: npm


    【解决方案1】:

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

    npm deprecate %ProjectName%@"

    npm Deprecate instructions

    【讨论】:

      【解决方案2】:

      简单来说,不,你不能。但是 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.
      

      【讨论】:

      • 使用&lt;=而不是&lt;可能会更好,这样它也会通知最新版本?
      【解决方案3】:

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

      npm unpublish <wrong package name> --force
      

      【讨论】:

      • 是的,如果包刚刚发布(不到 24 小时)就可以使用
      【解决方案4】:

      有人构建了一个方便的小 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 命令。

      【讨论】:

      • npm 应该有一个新的口号:将 javascript 开发人员的时间作为服务节省
      • 请注意,如果您使用 npm 启用了 2FA,则 pkg-rename 不起作用
      【解决方案5】:

      来自文档:

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

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

      npm unpublish <package_name> -f
      

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

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

      【讨论】:

        【解决方案6】:

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

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

        虽然还有另一种选择。如果您刚刚发布了您的包(距发布时间不到 24 小时)并且您确定可以删除该包并发布一个具有正确名称的新包,您可以继续执行此操作。但 NPM 将不允许您在发布后 24 小时后删除该包。

        幸运的是,我在不到 20 分钟的时间内发现我用错误的名称发表了文章。所以我只是删除并重新发布了一个新名称。

        【讨论】:

        • 有趣,我正在尝试这样做,但我被告知“包名称与现有包太相似” - 即使我刚刚删除了旧包。
        • 哦,实际上在我的情况下,相似之处在于另一个包,而不是我的旧包。
        【解决方案7】:

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

        希望有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-22
          • 1970-01-01
          • 2015-12-09
          • 1970-01-01
          • 2019-03-13
          • 1970-01-01
          • 2013-02-09
          • 1970-01-01
          相关资源
          最近更新 更多