发布包

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: [email protected]
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 [email protected]

完成此步骤后,请查看您的电子邮件收件箱以获取确认邮件。在您点击邮件中的链接后,您的帐户就可以使用了。

为您的包命名

在发布之前,您需要选择包的名称。请记住,发布到 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
用于排除可能通过文件和 include_paths 以及标准项目路径累积的文件的正则表达式列表。
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"}
       ]}.

<myapp>.app.src 文件示例

{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_dochex.pm 上发布您的包的文档,以便获得一致的格式和样式。

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

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

或者,或者在低于 OTP-24 的 Erlang 版本上,您可以使用 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.org.cn 网站上,并将作为 rebar3 或 mix 项目中的依赖项可用。

发布后,请通过将其作为依赖项添加到 rebar3 项目并获取和编译它来测试您的包。如果出现任何问题,您可以在首次发布后的一小时内再次发布包。也可以使用 rebar3 hex revert NAME VERSION 撤销发布。

运行发布包的命令时,Hex 将创建 files 属性中列出的所有文件和目录的 tar 文件。将 tarball 推送到 Hex 服务器后,它将上传到 CDN,以便用户快速可靠地访问。Hex 还将重新编译所有客户端将在获取依赖项时自动更新的注册表文件。

rebar3 hex 插件文档 包含有关 hex 插件本身和发布包的更多信息。