用于各种任务的推荐步骤和可能的默认配置。

如果你了解基础命令,已经阅读入门基本用法,并且对发布(Releases)有简要的理解,那么下一步可能是为项目和团队制定工作流。

为对 Erlang 工具链有良好的体验,本节介绍用于各种任务的多个推荐步骤和可能的默认配置(WIP)。


1. 选择正确的项目类型

项目类型推荐模版解释
简短的脚本或工具escript用户需要安装 Erlang。C 中的依赖既不会被包含,也不会被重新分发
完整的、自包含的可执行系统release 或 umbrella这是用于 Erlang 系统的推荐的生产部署。查看 Releases 部分,获取关于发布的更多细节
在其它系统中使用的库lib 或 applib 用于包含模块的无状态库,app 用于带监督树的有状态库
多个库的集合umbrella这是支持使用多个顶级应用程序的一种项目形式。这些项目通常不能用作依赖。对于可用作依赖的项目,请查看 how to declaregit_subdir dependencies

2. 设置依赖

项目的基础配置应该至少做两件事:

  1. 始终追踪 rebar.lock 文件
  2. 忽略 _build 目录

追踪锁文件使你可以重复构建;当切换分支时,允许 Rebar3 执行自动地重新更新依赖之类的事情。

删除 _build 目录应该是安全的,但不需要这么做

Rebar3 追踪 rebar.config 文件中声明的所有应用程序,并且能够追踪所有必需的变更。有少许边缘情况,无法做到这些,并且可能导致奇怪的 Bug,特别是当改变项目结构时。如果正在从单应用程序项目转移到伞形项目(即所有源文件从 src/ 转移到 apps/myapp/src)或者相反,_build 目录中的多个制品将相互冲突。在这种情况下,删除它,并且执行一次新构建。

你希望做的下一件事情是向项目添加依赖。为此,请查看 Dependencies 部分。但是,添加依赖不会自动地将它们集成进项目。

{deps, [...]} 配置值告诉 Rebar3 获取、下载及追踪哪些依赖,但也就到此为止。然后必须配置应用程序使用这些依赖:

其它构建工具倾向于不区分这些类型的项目包含,但 Rebar3 试图严格规定应该包含或不包含的内容。它可以让你运行特定的构建,比如不要特定工具链(比如 Wx 图形工具包)即可运行的 escript 或测试发布。


3. 升级依赖

当升级依赖时,有两个必要步骤:

  1. 更新索引缓存
  2. 更新依赖自身

第一步是必须的,因为 Rebar3 维持以前获取过的 Hex.pm 存储库包和版本的缓存。这使得构建工具运行得更快,当计算机上存在所有已知和必需的版本时,无需无用的网络调用。但是,当存在新版本时,Rebar3 无法自动知晓。为告诉它去获取已知包的新版本定义,调用:

这将更新 Hex 包,但不修改现有项目。

更改现有项目定义的唯一方式是通过修改锁文件。这很容易完成,调用:

这将更新锁文件定义,并且在下次构建,将获取及编译新拷贝。如果传递依赖也已升级,那么将被检测及处理。

应尽可能避免删除锁文件,如果需要更新多个依赖,可以调用 rebar3 upgrade dep1,dep2,dep3。如果想更新所有依赖,调用 rebar3 upgrade --all,这在小型项目上是可以的,但在大型项目上,可能需要逐步执行。


4. 为通用任务创建别名

更复杂的项目可能运行多个工具。比如,你可能希望运行 xref 查找死代码,dialyzer 用于类型分析,ct 用于通用测试套件,cover 用于覆盖率分析等。

别名可以创建简单的命令运行多个任务,而非手动调用所有的任务:

该配置允许调用 rebar3 check,它将依次运行下面的步骤:

一旦某个任务失败,那么整个命令被中断。可以根据需要调整别名。

优化任务延迟

节省时间的一个技巧是先运行较短的任务。比如 xref 会发现一些 dialyzer 也能发现的问题,但速度快得多。在别名中,在 Dialyzer 之前运行 xref 将给你更快的反馈循环。


5. 各种工具的推荐配置

一些 Rebar3 配置和默认值要么过于宽松,要么过于严格。但为保证向后兼容,不能总改变或调整它们,因为这样做可能破坏依赖这些特定配置的项目。

下面是一些配置的集合,在启动新项目时,这些配置可以用作新默认值。