宣布 hex_core

· 由 Wojtek Mach

今天我們發布 hex_core 第一個版本,這是可以與 Hex.pm 以及實作 Hex 規格的其他伺服器互動的 Erlang 函式庫。

在討論 hex_core 之前,我們先問一個簡單的問題:Hex 是什麼?簡短的回答是,它是 Erlang 生態系的套件管理員。長一點的回答是,我們可能會將 Hex 視為某些不同的東西

  1. 可以相互互動的建置用戶端和伺服器規格組:https://github.com/hexpm/specifications
  2. 用於存放套件的伺服器,例如位於 https://hex.dev.org.tw 的官方伺服器
  3. 用於與伺服器互動的用戶端,例如 Elixir 專用的 Hex 和 Erlang 專案專用的 rebar3_hex

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 的人的起點。敬請期待!