安裝
直接到 rebar release 下載 binary 執行檔,就可以使用。
Workflow
使用 rebar3 建議採用以下程序
選擇專案類型
template | 類型 | 說明 |
---|---|---|
escript | short script or util | 使用者需要自己安裝 erlang。 dependencies in C 可以直接包進專案,或是讓使用者自行安裝 |
release umbrella |
full, self-contained, executable system | production deploy for erlang system |
lib app |
library | lib: stateless library that contain modules app: stateful library with a supervision tree |
umbrella | collection of multiple libraries | on form of project supported where multiple top-level apps are used |
設定 dependencies
設定時要做兩件事
track the
rebar.lock
file可以取得 repeatable builds,然後能在 switch branches 時,讓 rebar3 處理自動 re-update dependencies
忽略
_build
目錄可以直接刪除
_build
目錄,但不應該這樣做。rebar3 會追蹤所有rebar.config
中宣告的 applications,但在發生奇怪的 bug 時,或是修改 project structure (例如移動 src 目錄),就可以直接刪除_build
。
接下來就是 add dependencies
- 如果 dependency 是 needed at runtime (例如需要 web server 或是 要直接呼叫 library),就要新增到 application 的
.app.src
的{applications, [stdlib, kernel,...]}
裡面,這樣 erlang VM 就會知道如果沒有這些 dependencies,就無法 boot app - 如果 dependency 是 needed for release (例如 observer or recon),類似 debugging tools,就要新增到
{release, ...}
裡面
更新 dependencies
- update the index cache
- update the dependency itself
rebar3 會保留一份 Hex.pm respository packages 的 cache,以及先前使用的 versions。但如果有了新版,rebar3 不會自動知道,故要下指令查詢
rebar3 update
這會更新 Hex packages,但不會修改既有的 project。要修改既有專案定義的方法,是修改 lock file,以下指令會修改 lock file 定義,在下次 build 時,會取得新版
rebar3 upgrade <depname>
要盡量避免刪除 lock file,可同時更新多個 app,如果沒有 app 參數,就是更新所有 applications
rebar3 upgrade app1,app2,app3
create aliases for common tasks
xref
是尋找 dead code
dialyzer
是 type analysis
ct
是 Common Test suites
cover
是 coverage analysis
可利用 alias 建立多個 tasks 的 simple command
{alias, [
{check, [xref, dialyzer, edoc,
{proper, "--regressions"},
{proper, "-c"}, {ct, "-c"}, {cover, "-v --min_coverage=80"}]}
]}.
呼叫 rebar3 check
,會依序處理
xref
檢查是否有呼叫未定義的 functionsdialyzer
檢查 inconsistencies and type errors- 產生 edoc
- 用
proper
執行 regression tests(使用 PropEr plugin) - 在 compiling with coverage analysis 時,用 PropEr 執行 regular properties
- 在 compiling with coverage analysis 時,執行 Common Test test suites
- 執行
cover
,將結果輸出到 shell
建議設定
隱藏太詳細的 report
{dialyzer, [
{warnings, [
%% Warn about undefined types and unknown functions
unknown
]}
]}.
{xref_checks,[
%% enable most checks, but avoid 'unused calls' which is often
%% very verbose
undefined_function_calls, undefined_functions, locals_not_used,
deprecated_function_calls, deprecated_functions
]}.
{profiles, [
{test, [
%% Avoid warnings when test suites use `-compile(export_all)`
{erl_opts, [nowarn_export_all]}
]}
]}.
沒有留言:
張貼留言