安装rebar3

macOS可以简单的用homebrew安装,其他平台可以看官方文档

1
$ brew install rebar3

创建Erlang应用

1
$ rebar3 new app myapp

生成的目录结构

1
2
3
4
5
6
7
8
9
10
$ cd myapp
$ tree
.
├── LICENSE
├── README.md
├── rebar.config
└── src
├── myapp.app.src
├── myapp_app.erl
└── myapp_sup.erl

因为Rebar3只处理OTP结构的项目,所以约定成俗用一个 .app.src 文件定义你的应用是一个OTP应用。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat src/myapp.app.src
{application, myapp,
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {myapp_app, []}},
{applications,
[kernel,
stdlib
]},
{env,[]},
{modules, []}
]}.

src/myapp_app.erl是一个非常简单的代码框架。它只是让你可以启动和停止你的Erlang应用。

1
2
3
4
5
6
7
8
9
$ cat src/myapp_app.erl
-module(myapp_app).
-behaviour(application).
-export([start/2, stop/1]).

start(_StartType, _StartArgs) ->
myapp_sup:start_link().
stop(_State) ->
ok.

Rebar3用rebar.config来指定一些额外的元数据。

1
2
3
$ cat rebar.config
{erl_opts, [debug_info]}.
{deps, []}.

现在我们用Rebar3启动一个Erlang shell,它包含了你的应用及依赖的路径。

1
2
3
4
5
6
7
===> Verifying dependencies...
===> Compiling myapp
Erlang/OTP 21 [erts-10.3.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]

Eshell V10.3.1 (abort with ^G)
1> ===> The rebar3 shell is a development tool; to deploy applications in production, consider using releases (http://www.rebar3.org/docs/releases)
===> Booted myapp

PS:如果直接粗暴的CTRL + C退出shell的话,可能会让控制台乱掉。正确的做法是CTRL + G, q。如果想了解更多关于rebar3 shell可以阅读这篇文档

Erlang包管理工具的准备工作

使用rebar3_hex的插件来从Hex.pm(Erlang和Elixir的包管理者)获取和安装Erlang包。简单地把如下一行加入到rebar.config文件中即可。

1
{plugins, [rebar3_hex]}.

然后运行命令:rebar3 update来启用这个插件。

1
2
3
4
5
6
7
$ rebar3 update
===> Fetching rebar3_hex ({pkg,<<"rebar3_hex">>,<<"6.5.0">>})
===> Fetching hex_core ({pkg,<<"hex_core">>,<<"0.5.0">>})
===> Fetching verl ({pkg,<<"verl">>,<<"1.0.1">>})
===> Compiling verl
===> Compiling hex_core
===> Compiling rebar3_hex

查找Erlang包

搜索命令让你远程查找在Hex.pm上发布的Erlang包。你可以在查询语句里用正则表达式字符。

1
$ rebar3 hex search cowboy

安装Erlang包

Rebar3能下载和安装Erlang包以及任何必要的依赖。在你的rebar.config文件里增加应用名字到deps配置项,然后运行命令:rebar3 compile。下面的例子,我们尝试使用两个Erlang包,cowboy和meck。

1
{deps, [cowboy, meck]}.
1
2
3
4
5
6
7
8
9
10
11
$ rebar3 compile
===> Verifying dependencies...
===> Fetching cowboy ({pkg,<<"cowboy">>,<<"2.6.1">>})
===> Fetching cowlib ({pkg,<<"cowlib">>,<<"2.7.0">>})
===> Fetching ranch ({pkg,<<"ranch">>,<<"1.7.1">>})
===> Fetching meck ({pkg,<<"meck">>,<<"0.8.13">>})
===> Compiling cowlib
===> Compiling ranch
===> Compiling cowboy
===> Compiling meck
===> Compiling myapp

想要安装一个Erlang包的指定版本?在配置中把应用名字和版本写在一个元组中。你可以在Hex主页上查询Erlang包的可用版本。

1
{deps, [{cowboy, “1.0.2”}, {meck, "0.8.3"}]}.

列出已安装的Erlang包

rebar3 deps 命令列出你本地已经安装的包。

1
2
$ rebar3 deps
cowboy* (package)

卸载Erlang包

要卸载一个包,你首先要在rebar.config文件中将它删除,然后使用命令:rebar unlock。现在我们卸载meck包。

1
2
3
$ rebar3 unlock
$ rebar3 deps
cowboy* (package)

进一步阅读

https://www.rebar3.org