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

今天,我们很高兴地宣布: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账号的公开信息。
ruby 复制代码
$ 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. 当显示如下内容,即表示登录成功
ruby 复制代码
$ 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,这个命令用于更新本地索引信息。

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

bash 复制代码
$ 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添加这个模块的最新版本到依赖中:

bash 复制代码
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上提供的详细文档。 链接:mooncakes.io/docs/#/guid...

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

结语

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

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

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

相关推荐
舒一笑3 小时前
PandaCoder 的解构与新生:为中文开发者造一束专注的光
后端·程序员·intellij idea
AI大模型6 小时前
全面掌握 AI Agent 30 个高频面试的问题与解答相关的核心知识点!
程序员·llm·agent
大模型教程1 天前
AI智能体(Agent)保姆级入门指南,零基础小白也能轻松上手
程序员·llm·agent
大模型教程1 天前
产品经理必看!AI大模型上线前,如何确保它不会“胡言乱语”?
程序员·llm·agent
大模型教程1 天前
别再堆模型了!构建智能体系统,你需要掌握这8个核心要点
程序员·llm·agent
HyperAI超神经1 天前
【TVM 教程】优化大语言模型
人工智能·语言模型·自然语言处理·cpu·gpu·编程语言·tvm
大模型教程2 天前
大模型平民化:3块钱、2小时,MiniMind开源项目全解析
程序员·llm·agent
Vadaski2 天前
私有 Context 工程如何落地:从方法论到实战
人工智能·程序员
大模型教程2 天前
大模型(Qwen3)训练实战:从零开始玩转LLaMA-Factory
程序员·llm·agent
AI大模型2 天前
工程师学AI之第三篇03:线性代数点积运算助你理解大模型注意力机制
程序员·llm·agent