設定檔腳本

使用 rebar.config*.app.src,您可以利用基於 file:script/2 的動態設定。

如果在原始檔案相同的目錄中存在 <name>.script(在 rebar.config 的情況下,它會是 rebar.config.script),腳本檔案將會被評估,並將結果用作設定。

為了方便起見,在評估期間,腳本中可以使用兩個綁定(變數)

  • CONFIG - 如果正在評估的腳本檔案也存在(沒有 .script 副檔名),則為 file:consult/1 的結果。否則為 []

  • SCRIPT - 正在評估的腳本的檔案名稱

在所有情況下,腳本返回的數據(即檔案中最後評估的內容)必須與原始非腳本檔案格式相同的數據。例如,如果我有一個 rebar.config.script,該腳本必須返回 Rebar3 設定數據;如果它是 <app-name>.app.src.script,它必須返回應用程式中繼數據格式的數據。

每個腳本在每次 Rebar3 執行中可能會執行多次。避免使用非 冪等 副作用的腳本是一個好主意。

簡單範例

如果您正在建置相當複雜的系統,每次都去 GitHub 抓取依賴項會減慢您的開發週期。在本地提供依賴項可能會快得多,但您不希望修改 rebar.config 並因此導致合併衝突。

以下 rebar.config.script 檔案可以集中存放,並連結到您的應用程式目錄中

case os:getenv("REBAR_DEPS") of
    false -> CONFIG; % env var not defined
    []    -> CONFIG; % env var set to empty string
    Dir ->
    lists:keystore(deps_dir, 1, CONFIG, {deps_dir, Dir})
end.

當您想要「正確地」建置時(您應該定期這樣做),只需呼叫 unset REBAR_DEPS(或等效指令),然後執行全新建置。

請注意,file:script/2file:consult/1 的不同之處在於,它只返回最後一個表達式的結果。因此,您必須注意返回設定項列表。在此之前,您可以執行任何形式的 I/O(包括網路)、檢查作業系統環境變數、讀取檔案(可能在其他檔案上呼叫 file:script/2)或寫入檔案。您基本上可以使用所有 OTP 函式庫。與 file:eval/2 中一樣,每個表達式都以句點結尾。

上次修改時間:2021 年 5 月 21 日:將 http:// 更改為 https://(主要是外部參考)(d04deab)