Erlang 套件可以用 rebar3 的 Hex 外掛發佈。建議將輸入項目放入全域 rebar3 設定,設定內容寫成 ~/.config/rebar3/rebar.config
。
{plugins, [rebar3_hex]}.
要發佈套件到 Hex,必須要註冊 Hex 使用者,在專案的 .app.src
檔案中新增元資料,最後使用 rebar3
提供者提交套件。
在註冊時,系統會提示您輸入使用者名稱、電子郵件帳號和密碼。我們會使用您的電子郵件帳號來確認您的身分,以及在您的套件發生問題時與您聯絡。我們絕不會將您的電子郵件帳號提供給其他第三方。
$ 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_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
files
include_paths
exclude_paths
exclude_patterns
build_tools
定義未設定 SCM(git
或 hg
)的相依性,自動視為 Hex 相依性。更多詳細資訊,請參閱 使用指南。
只有 Hex 套件可以視為套件的相依性。無法上傳有 Git 相依性的套件。此外,僅會包含 default
相依性,這就像 rebar3 在提取相依性的相依性時,只會提取 default
相依性一樣。
{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 外掛程式本身和發行套件的更多資訊。