Erlang 开发人员必备的 10 个 Erlang 工具

发布日期:2026-07-10 18:53:05   来源 : 杭州电子商务研究院    浏览量 :1
杭州电子商务研究院 发布日期:2026-07-10 18:53:05  
1

概括

在本教程中,我将介绍我作为 Erlang 开发人员在日常生活中最常使用的工具。所有或大多数主题都具有以下特点:

  • 它们是专门为 Erlang 构建的(即没有文本编辑器、没有 git 等)。
  • 它们不是针对某一特定类型的应用程序而定制的(即,您可以使用它们来开发任何类型的 Erlang 应用程序)。

在 Shell 中工作

与许多其他语言一样,与 Erlang VM 交互的最常见方式是通过 Erlang shell。您可以使用它来测试代码、学习如何使用 Erlang 以及调试生产系统。Erlang shell 功能强大,但您可以使用下面我将向您展示的三个工具为其添加更多功能。

1. 用户默认

通常,要在 Erlang 中评估模块外的函数,必须在其名称前加上相应的模块名称。例如,如果要对列表求和,则必须执行以下操作:

      1> lists:sum([1, 2, 3]).
6
2>
    

但您会注意到,对于 shell 中的某些函数,您不需要显式定义。例如:

      1> c(your_module).
{ok,your_module}
2> h().
1: c(your_module)
-> {ok,your_module}
ok
3> e(1).
{ok,your_module}
4>
    

这些函数在哪里?它们在shell_default模块中定义。您也可以添加自己的默认函数。为此,您必须创建并加载一个名为user_default 的模块。例如,我喜欢在使用 Erlang shell 时运行 bash 命令;我不想离开 shell 只是为了复制文件。Erlang/OTP 为您提供了一个函数来执行此操作:os:cmd/1,但它不会打印出命令的输出。相反,此命令将以字符串形式返回该输出。您必须打印字符串才能正确查看输出。

因此,使用user_default ,我在user_default.erl文件中添加了以下几行

      -module(user_default).
-export([cmd/1].

cmd(Cmd) -> io:format("~s~n", [os:cmd(Cmd)]).
    

现在我可以使用我的 shell运行、执行并打印os:cmd/1的结果:

      1> c(user_default).
{ok, user_default}
2> cmd("cat user_default.erl").
-module(user_default).
-export([cmd/1].

cmd(Cmd) -> io:format("~s~n", [os:cmd(Cmd)]).

ok
3>
    

2. ~/.erlang

但是,我必须在打开的每个 shell 中手动加载user_default 。 ~/.erlang来帮忙!~/.erlang是一个几乎与 bash 的~/.bashrc一样工作的文件。启动时,shell 会读取~/.erlang并评估它在那里找到的每个表达式,就像它们是输入到 shell 中一样。

因此,我在该文件中添加了以下几行:

      UD = "/path/to/my/user_default".
shell_default:c(UD).
    

我的~/.erlang实际上比这更复杂,但shell_default应该能让你了解我修改的要点。现在,我打开的每个 shell 都支持cmd/1

3. erlang-history

Erlang shell 最令人讨厌的一点是它不能很好地跟踪命令历史记录。事实上,默认设置会在关闭 shell 时清除所有命令历史记录。我见过许多开发人员通过一个 Erlang 表达式笔记本来解决此限制,每次他们都会从中复制并粘贴到控制台中。(其中一些人使用user_default和/或~/.erlang来实现这一点。)

但这仍然不是一个真正的解决方案,对吧?为了正确修复该问题,在安装新版本的 Erlang/OTP 后,我立即安装了erlang-history这是对 Erlang/OTP 发行版的一个非常小的几乎看不见的黑客攻击,其目的很简单:跟踪 Erlang shell 中以前的命令并让您重复使用它们。简单,但非常有用。

管理您的应用程序

一旦您超越简单的示例并进入 OTP 应用程序领域,您将更好地使用构建工具,它可以帮助您组织代码,管理依赖项,构建版本,运行测试等。

使用 Erlang 时,您既可以采用Makefile,也可以尝试尽可能远离它。

4. erlang.mk

如果使用 Makefile 来构建和管理你的项目对你来说很自然,你可能会喜欢erlang.mkerlang.mk基本上是一个很大的 Makefile 脚本,你可以将其包含在你自己的 Makefile 中,如下所示:

      PROJECT=your_app
include erlang.mk
    

通过它,你可以访问许多命令,例如

  • $ make构建你的项目
  • $ make tests运行你的测试套件
  • $ make rel生成发布版本

您可以使用$ make help找到整个列表,当然,您可以通过扩展 Makefile 来添加更多内容。

erlang.mk还提供了插件基础架构,您可以在其中添加构建工具,例如hexer.mkelvis.mk

erlang.mk的最大优点是它为构建几乎所有现有的 Erlang 库提供了必要的支持,无论库所有者使用什么工具来维护它。使用erlang.mk,您可以将使用rebarrebar3erlang.mk(如预期的那样 :P)、临时Makefile和其他文件构建的应用程序包含在存储库中。您可以从githubhex.pmbitbucket、本地文件系统和许多其他地方下载依赖项。显然, erlang.mk使 Erlang 变得更加通用。

5. rebar3

现在,如果 Makefile 不是你的菜,而你更喜欢使用由 Erlang/OTP 团队赞助的官方构建工具(自 2016 年 3 月起),那么rebar3就是你的选择。

rebar3完全用 Erlang 编写,其理念是你无需在项目中添加任何 Makefile 即可使用它。

在系统中安装后,您应该在项目的根文件夹中添加一个rebar.config文件。最小文件如下所示(尽管下面的选项也是可选的):

      {deps, []}.
{erl_opts, [debug_info]}.
{cover_enabled, true}.
    

您可以在此处找到可以指定的所有选项的列表。然后,您可以在 shell 中运行以下命令:

  • $ rebar3 compile获取 deps 并构建你的项目
  • $ rebar3 ct运行测试
  • $ rebar3 release生成发布版本

当然,$ rebar3 help会为您提供所有可用命令的列表。而且,与erlang.mk一样,rebar3也可以通过插件进行扩展。

rebar3最大的优点之一是,通过使用rebar.lock,它提供了可重复的构建。这样,一旦你确定你的项目按预期工作,你可以确保它将继续按预期工作,无论你编译多少次或在多少个不同的地方编译它。

确保代码质量

我曾多次在网上(在采访和博客文章中)亲自提到过,保持高代码质量非常重要(尤其是如果你从事开源项目)。Erlang 附带了几个可以帮助你做到这一点的工具。Erlang 工具甚至可以帮助你检测在运行时可能发现的错误……而无需运行你的系统!

6. 透析器

Dialyzer是一个静态分析工具,可以帮助您识别代码中的类型不一致问题,例如当您将binary()作为参数传递给需要string()的函数时。它曾经是一个非常非常慢的工具,但后来经过高度优化,现在运行顺畅,特别是如果您经常运行它。此外,它集成在rebar3erlang.mk。(请点击链接了解更多信息。)

如果您使用透析器dia.erl),您将看到如下所示的结果。

<
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据