發佈套件

Erlang 套件可以用 rebar3 的 Hex 外掛發佈。建議將輸入項目放入全域 rebar3 設定,設定內容寫成 ~/.config/rebar3/rebar.config

rebar.config 檔案範例

{plugins, [rebar3_hex]}.

要發佈套件到 Hex,必須要註冊 Hex 使用者,在專案的 .app.src 檔案中新增元資料,最後使用 rebar3 提供者提交套件。

註冊 Hex 使用者

在註冊時,系統會提示您輸入使用者名稱、電子郵件帳號和密碼。我們會使用您的電子郵件帳號來確認您的身分,以及在您的套件發生問題時與您聯絡。我們絕不會將您的電子郵件帳號提供給其他第三方。

$ rebar3 hex user register
Username: johndoe
Email: john.doe@example.com
Password:
Password (confirm):
Registering...
Generating API key...
You are required to confirm your email to access your account, a confirmation email has been sent to john.doe@example.com

完成這個步驟後,請至您的電子郵件收件匣確認您的電子郵件信箱。只要您點選連結,您的帳號就可以開始使用了。

為套件命名

發布前,您必須選擇套件的名稱。請記住發布於 Hex 的套件是公開的,社區中的任何人都可以存取。社區也有責任挑選並推廣好的套件名稱。以下是幾個建議

  • 避免使用冒犯性或騷擾性的套件名稱、綽號或其他識別字元,這些識別字元可能會損害所有人友善、安全和溫馨的環境。
  • 如果您提供某個現有套件之上的功能,請考慮使用該套件名稱作為字首。例如,如果您正在為 Rebar3 建立一個外掛程式,請考慮將您的套件稱為 rebar3_plugin(或 rebar3_somename),而不是 plugin(或 somename)。

有了名稱之後,即可將適當的元資料新增到您的 <myapp>.app.src 檔案。

將元資料新增到 src/<myapp>.app.src

套件在 src/<myapp>.app.src 檔案中設定。有關範例檔案,請見下方。雖然應用程式相依關係在 rebar.config 中,如下方所見

首先,請確定 vsn 屬性正確。所有 Hex 套件都需要遵循 語意版本控管vsn 和應用程式名稱為唯一需要的屬性。雖然您的套件版本在主要版本為「0」時,任何重大變更都應透過增加次版本來標示。例如,0.1.0 -> 0.2.0

然後填寫 description 屬性。它應該是一個句子,或幾個句子,用來描述套件。description 為選用屬性,但強烈建議使用。

您也可以將下列任何項目加入應用程式屬性清單中

licenses
專案授權的授權清單。此屬性為必要屬性。
pkg_name
套件名稱,如果您要發布套件時,指定與應用程式名稱不同的名稱。
links
鍵為連結名稱,值為連結 URL 的對應。為選用但極力推薦屬性。
files
要在套件中包含之檔案與目錄清單。預設值為標準專案目錄,所以您通常不需要設定此屬性。
include_paths
包含您要納入套件的檔案路徑清單。
exclude_paths
包含您要從套件中排除的檔案路徑清單。
exclude_patterns
用於排除可能透過檔案和包含路徑及標準專案路徑累積而成的檔案的正規表示式清單。
build_tools
可建立套件的建置工具清單。您需要設定此項目的情況非常罕見。

相依性

定義未設定 SCM(githg)的相依性,自動視為 Hex 相依性。更多詳細資訊,請參閱 使用指南

只有 Hex 套件可以視為套件的相依性。無法上傳有 Git 相依性的套件。此外,僅會包含 default 相依性,這就像 rebar3 在提取相依性的相依性時,只會提取 default 相依性一樣。

rebar.config 檔案範例

{deps, [{erlware_commons, "0.15.0"},
        {providers, "1.4.1"},
        {getopt, "0.8.2"},
        {bbmustache, "1.0.3"}
       ]}.

範例
{application, relx,
  [{description, "Release assembler for Erlang/OTP Releases"},
   {vsn, "3.5.0"},
   {modules, []},
   {registered, []},
   {applications, [kernel,
                   stdlib,
                   getopt,
                   erlware_commons,
                   bbmustache,
                   providers]},
   {licenses, ["Apache-2.0"]},
   {links, [{"GitHub", "https://github.com/erlware/relx"}]}]}.

文件

rebar3_hex 預設情況下會期望您設定文件提供者。我們建議利用 rebar3_ex_doc 為您的套件發行文件,以在 hex.pm 維持一致的格式和樣式。

{ex_doc, [
    {source_url, <<"https://github.com/namespace/your_app">>},
    {extras, [<<"README.md">>, <<"LICENSE">>]},
    {main, <<"readme">>}
]}.

{hex, [{doc, ex_doc}]}.

或者,在較舊版本的 Erlang (小於 OTP-24) 中,您可以使用隨附在 rebar3 的 edoc 提供者

{hex, [{doc, edoc}]}.

提交套件

將套件資料和依賴項新增到 src/<myapp>.app.src 後,我們準備使用 rebar3 hex publish 指令發行套件

$ rebar3 hex publish
Publishing relx 3.5.0
  Dependencies:
    bbmustache 1.0.3
    erlware_commons 0.15.0
    getopt 0.8.2
    providers 1.4.1
  Excluded dependencies (not part of the Hex package):

  Included files:
    src/relx.app.src
    src/relx.erl
    src/rlx_app_discovery.erl
    src/rlx_app_info.erl
    src/rlx_cmd_args.erl
    src/...
    include/relx.hrl
    priv/...
    rebar.config
    rebar.lock
    README.md
    LICENSE.md
Proceed? ("Y") Y
Published relx 3.5.0
Running edoc for relx
Running ex_doc for relx
Published docs for relx 3.5.0

恭喜,您已經發行套件!它將出現在 https://hex.dev.org.tw 網站中,讓其他 rebar3 或 mix 專案可以加入作為依賴項。

發佈套件後,請使用 rebar3 專案加入它作為依賴項、擷取和編譯它來測試您的套件。如果有任何問題,您最多可以在首次發佈後的一個小時內再次發佈套件。也可以使用 rebar3 hex revert NAME VERSION 來復原發佈。

執行指令發佈套件時,Hex 會為 files 屬性中列出的所有檔案和目錄建立一個 tar 檔案。將 tarball 推送到 Hex 伺服器後,它將上傳到 CDN,讓使用者快速且可靠地存取。Hex 還會重新編譯註冊表檔案,讓所有用戶端在擷取依賴項時都會自動更新。

rebar3 hex 外掛程式的文件 包含有關 hex 外掛程式本身和發行套件的更多資訊。