【新功能上线】mooncakes.io:新一代MoonBit包管理平台来啦!!

2023-12-28 20:00:11

今天,我们很高兴地宣布:mooncakes.io (MoonBit的包管理和共享平台)正式上线! MoonBit最大的价值在于生态,更多的人更早的参与进来可以帮助我们一起完善MoonBit平台,一起分享它的成长。虽然还处于非常早期的阶段,还有很多地方需要完善,但是我们想第一时间分享给大家!

接下来,让我们一起深入了解 mooncakes.io 的独特之处。

mooncakes.io:中心化的MoonBit包管理平台

在这里插入图片描述

mooncakes.io 是一个中心化的MoonBit包管理。在这里,用户可以轻松上传分享、使用以及探索各种MoonBit模块。

为此,MoonBit的构建系统moon集成了与 mooncakes.io 进行交互的命令,让用户可以免去手动下载和配置依赖的困扰。与其他大多数包管理器不同,MoonBit的依赖解析使用与Go类似的最小版本选择算法,可以精确地确定需要构建哪些依赖,不会隐式地升级新版本,从而为开发者打造稳定可重现的构建体验。

mooncakes.io 托管了所有用户发布的MoonBit模块,这些模块也可以称之为“月饼”。用户发布到 mooncakes.io 的内容以模块为最小单位,每个模块下可以有多个包。每个用户在 mooncakes.io 有自己独立的命名空间,用户上传的模块的名称格式为 <username>/<package_name>。在 mooncakes.io 发布的模块版本根据语义化版本2.0.0定义,月兔将根据兼容性解析具体的版本。

除此之外,mooncakes.io 还是一个文档托管平台,当用户成功发布一个模块之后,mooncakes.io 会自动构建该模块的文档页面。我们希望这样一个中心化平台能为用户提供简单、一致的使用体验。

为进一步增强用户体验,我们还提供与 mooncakes.io 深度整合的工具链,以帮助用户更好地集成到 MoonBit 上。

与 mooncakes.io 深度整合的工具链

  1. MoonBit的构建系统 moon 集成了与 mooncakes.io 进行交互的命令

moon login:登录到 mooncakes.io

moon publish:发布一个包到 mooncakes.io。其中版本号格式按照语义化版本2.0.0进行校验,对于同一个模块,每次发布的版本号必须单调递增。

moon add:添加一个依赖。例如 moon add Yoorkin/example/list@0.1.2,如果不指定版本 moon add Yoorkin/example/list 将会添加最新版本。构建系统会执行依赖解析,找到所有需要依赖的模块及其版本,然后从 mooncakes.io 下载相关模块到当前模块,同时自动更新 moon.mod.json

moon remove:移除一个依赖

moon tree:以树状结构列出所有依赖

moon update:更新本地索引。索引中记录了 mooncakes.io 上所有的包的版本及其依赖信息。索引文件使用 git进行管理,因此在完成第一次更新之后,后续的 moon update 便可只进行增量更新,这需要您的环境中有 git 命令。

moon install:按照 moon.mod.jsondeps 字段自动安装所有依赖。
在这里插入图片描述

  1. moondoc文档生成工具

moondoc 是一个从MoonBit项目收集文档注释并生成文档信息的命令行工具。在生成文档时,moondoc不仅分析顶层声明中的类型信息,还提供指向相应类型文档的链接。

用户可以在任何顶层的fnletenumtrait等结构前添加以///开头的文档注释,这些注释遵循Markdown格。如下图所示:
在这里插入图片描述

当文档在mooncakes.io上被自动构建后,用户点击顶层签名中的类型,例如self参数带下划线的类型Stack,便可以跳转到Stack类型的文档。如下图所示:
在这里插入图片描述

构建系统 moon 中已经集成了用于本地文档生成的命令 moon doc以及用于文档预览的命令 moon doc --serve

所有依赖管理、模块上传、文档的构建和预览都可以通过构建系统 moon完成。下面是一个简单的使用流程:

如何使用mooncakes.io

在使用 mooncakes.io 之前需要确保安装了MoonBit工具链

步骤1: 登录到 mooncakes.io

注意:如果你只是想使用 mooncakes.io 上的第三方包,而不是想发布一个包,可以跳过登录这一步骤。

  1. 在控制台输入 moon login,在浏览器中打开输出提示的链接,在这一步我们只会要求获取您的GitHub账号的公开信息。
$ moon login
Please open the following URL in your browser and paste the code.
https://github.com/login/oauth/authorize?client_id=f324b352b4d737e98223
>

  1. 复制login code,粘贴回控制台

在这里插入图片描述

  1. 当显示如下内容,即表示登录成功
$ moon login
Please open the following URL in your browser and paste the code.
https://github.com/login/oauth/authorize?client_id=f324b352b4d737e98223
> xxxxxxxxxxxxxxxxxxxxx
API token saved in ~/.moon/credentials.json

步骤2 :更新索引

在控制台输入 moon update,这个命令用于更新本地索引信息。

当命令执行成功后,输出类似如下:

$ moon update
Cloning into '$HOME/.moon/registry/index'...
remote: Enumerating objects: 404, done.
remote: Counting objects: 100% (404/404), done.
remote: Compressing objects: 100% (301/301), done.
remote: Total 404 (delta 138), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (404/404), 32.18 KiB | 2.92 MiB/s, done.
Resolving deltas: 100% (138/138), done.
Registry index cloned successfully

步骤3: 从mooncakes.io添加想要的模块

浏览mooncakes.io上的所有模块,查看你感兴趣的包的文档。以mooncakes.io上的Yoorkin/example/list这个模块为例,执行moon add添加这个模块的最新版本到依赖中:

moon add Yoorkin/example/list

模块会被自动下载并添加声明到moon.mod.json的依赖项deps
在这里插入图片描述

步骤4: 使用刚刚添加的依赖进行开发

在main这个package下导入Yoorkin/example/list这个package,这里给它取一个别名list。

在这里插入图片描述

参考这个模块的文档,我们借助它提供的of_arrayreverse函数反转并打印一个array

在这里插入图片描述

如下图,我们实现一个新的函数reverse_array。在控制台输入moon run main执行代码,效果如下:

在这里插入图片描述

步骤5 :上传新的模块

如果准备好发布一个模块了,使用moon publish即可上传:

在这里插入图片描述

等待mooncakes.io完成这个模块的构建后,即可看到新上传的模块的文档信息。你也可以使用moon doc --serve在本地构建和预览效果:

在这里插入图片描述

如果先前已经上传过这个模块,重新上传的模块的版本号需要大于已有的版本号。

详细文档

关于如何使用 mooncakes.io 的更多信息,请参阅**mooncakes.io上提供的详细文档。**链接:https://mooncakes.io/docs/#/guide

同时,文档会进行不断地更新与迭代。如发生变更,请以官网文档为准。

结语

mooncakes.io的发布是推动MoonBit生态系统向前发展的关键一步,但这只是一个新的开始。接下来,我们会不断优化与改进mooncakes.io,以提供给用户更友好的体验。我们期待你的试用与反馈,你的建议是我们不断前行的动力,帮助我们不断地完善与改进。

同时,我们诚邀所有对MoonBit感兴趣的用户加入这个充满活力的社区。无论你是上传自己开发的包,还是为现有的包提供改进和建议,你的每一次贡献都将对mooncakes.io的生态系统产生积极影响。

快来开启你的mooncakes.io之旅,共同构建一个不断成长的社区!

文章来源:https://blog.csdn.net/m0_74743788/article/details/135275951
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。