宣布 hex_core

· 作者 Wojtek Mach

今天我们发布了 hex_core 的第一个版本,这是一个与 Hex.pm 和其他实现 Hex 规范的服务器进行交互的 Erlang 库。

在谈论 hex_core 之前,让我们问一个简单的问题:什么是 Hex?简短的答案是,它是 Erlang 生态系统中的包管理器。长答案是,Hex 可以指代以下几种不同的概念。

  1. 一组构建客户端和服务器的规范,这些客户端和服务器可以相互交互:https://github.com/hexpm/specifications
  2. 用于托管包的服务器,例如位于 https://hex.org.cn 的官方服务器。
  3. 用于与服务器进行交互的客户端,例如 Hex 用于 Elixir 项目,以及 rebar3_hex 用于 Erlang 项目。

hex_core 的目标是成为 Hex 客户端和服务器使用的 Hex 规范的参考实现。

截至本公告发布,hex_core 包本身已在 Hex.pm 上提供。

在 Erlang 项目中使用

  1. 创建一个新项目:rebar3 new lib example

  2. hex_core 添加到 rebar.config

    {deps, [
      {hex_core, "0.1.0"}
    ]}
  3. 启动 shell 并统计发布到 Hex.pm 的所有包的数量

    $ rebar3 shell
    erl> inets:start(), ssl:start(),
    erl> Config = hex_core:default_config(),
    erl> {ok, {200, _, #{packages := Packages}}} = hex_repo:get_names(Config),
    erl> length(Packages).
    6764

在 Elixir 项目中使用

  1. 创建一个新项目:mix new example

  2. hex_core 添加到 mix.exs

    defp deps() do
      [{:hex_core, "~> 0.1"}]
    end
  3. 启动 shell 并搜索与查询“riak”匹配的所有包

    $ iex -S mix
    iex> :inets.start() ; :ssl.start()
    iex> config = :hex_core.default_config()
    iex> options = [sort: :downloads]
    iex> {:ok, {200, _, packages}} = :hex_api_package.search(config, "riak", options)
    iex> Enum.map(packages, & &1["name"])
    ["riak_pb", "riakc", ...]

更多使用示例,请参阅 https://github.com/hexpm/hex_core 上的 README 文件。

未来工作

在初始发布之后,我们计划与社区合作,将 hex_core 集成到他们的项目中并响应反馈。

我们还将专注于发布一个基于 hex_core 构建的最小 Hex 服务器,作为希望在自己的基础设施上运行 Hex 的人们的起点。敬请期待!