今天,我们很高兴地宣布:mooncakes.io (MoonBit的包管理和共享平台)正式上线! MoonBit最大的价值在于生态,更多的人更早的参与进来可以帮助我们一起完善MoonBit平台,一起分享它的成长。虽然还处于非常早期的阶段,还有很多地方需要完善,但是我们想第一时间分享给大家!
接下来,让我们一起深入了解 mooncakes.io 的独特之处。
mooncakes.io 是一个中心化的MoonBit包管理。在这里,用户可以轻松上传分享、使用以及探索各种MoonBit模块。
为此,MoonBit的构建系统moon
集成了与 mooncakes.io 进行交互的命令,让用户可以免去手动下载和配置依赖的困扰。与其他大多数包管理器不同,MoonBit的依赖解析使用与Go类似的最小版本选择算法,可以精确地确定需要构建哪些依赖,不会隐式地升级新版本,从而为开发者打造稳定可重现的构建体验。
mooncakes.io 托管了所有用户发布的MoonBit模块,这些模块也可以称之为“月饼”。用户发布到 mooncakes.io 的内容以模块为最小单位,每个模块下可以有多个包。每个用户在 mooncakes.io 有自己独立的命名空间,用户上传的模块的名称格式为
。在 mooncakes.io 发布的模块版本根据语义化版本2.0.0定义,月兔将根据兼容性解析具体的版本。
除此之外,mooncakes.io 还是一个文档托管平台,当用户成功发布一个模块之后,mooncakes.io
会自动构建该模块的文档页面。我们希望这样一个中心化平台能为用户提供简单、一致的使用体验。
为进一步增强用户体验,我们还提供与 mooncakes.io 深度整合的工具链,以帮助用户更好地集成到 MoonBit 上。
moon
集成了与 mooncakes.io 进行交互的命令moon login
:登录到 mooncakes.io
moon publish
:发布一个包到 mooncakes.io。其中版本号格式按照语义化版本2.0.0进行校验,对于同一个模块,每次发布的版本号必须单调递增。
moon add
:添加一个依赖。例如 moon add Yoorkin/example/[email protected]
,如果不指定版本 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.json
中 deps
字段自动安装所有依赖。
moondoc
文档生成工具moondoc
是一个从MoonBit项目收集文档注释并生成文档信息的命令行工具。在生成文档时,moondoc
不仅分析顶层声明中的类型信息,还提供指向相应类型文档的链接。
用户可以在任何顶层的fn
、let
、enum
、trait
等结构前添加以///
开头的文档注释,这些注释遵循Markdown格。如下图所示:
当文档在mooncakes.io上被自动构建后,用户点击顶层签名中的类型,例如self
参数带下划线的类型Stack
,便可以跳转到Stack
类型的文档。如下图所示:
构建系统 moon
中已经集成了用于本地文档生成的命令 moon doc
以及用于文档预览的命令 moon doc --serve
。
所有依赖管理、模块上传、文档的构建和预览都可以通过构建系统 moon
完成。下面是一个简单的使用流程:
在使用 mooncakes.io 之前需要确保安装了MoonBit工具链。
注意:如果你只是想使用 mooncakes.io 上的第三方包,而不是想发布一个包,可以跳过登录这一步骤。
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
>
$ 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
在控制台输入 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
浏览mooncakes.io上的所有模块,查看你感兴趣的包的文档。以mooncakes.io上的Yoorkin/example/list
这个模块为例,执行moon add
添加这个模块的最新版本到依赖中:
moon add Yoorkin/example/list
模块会被自动下载并添加声明到moon.mod.json
的依赖项deps
。
在main这个package下导入Yoorkin/example/list
这个package,这里给它取一个别名list。
参考这个模块的文档,我们借助它提供的of_array
和reverse
函数反转并打印一个array
。
如下图,我们实现一个新的函数reverse_array
。在控制台输入moon run main
执行代码,效果如下:
如果准备好发布一个模块了,使用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之旅,共同构建一个不断成长的社区!