使用 ASDF 安装 Elixir 和 Erlang

介绍

许多编程语言会定期发布新版本,以添加或弃用功能、修复错误并引入重大更改。为了帮助开发人员轻松地在版本之间切换,一些语言社区都有版本管理器(例如用于 Node.js 的 NVM 或用于 Ruby 的 Rbenv)。但是,当您需要一次切换多种语言的版本时,ASDF 版本管理器可确保每个项目都有所需的环境。

这在需要 Erlang 运行时的 Elixir 项目中尤其重要。在本指南中,您将了解如何在 macOS 或 Linux 上使用 ASDF 版本管理器安装特定版本的 Elixir 和 Erlang/OTP。

安装 ASDF

ASDF版本管理器是 GitHub 上提供的命令行工具。它使用curl并git安装各种语言。

安装先决条件

要安装curl和git实用程序,请运行:

brew install coreutils curl git  # on macOS with Homebrew
sudo apt install curl git        # on Linux

您可以在此处了解有关 macOS 上 Homebrew 的更多信息。

Clone ASDF

安装了先决条件后,现在克隆 ASDF 项目:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf

如果您希望删除 ASDF,可以通过.asdf从主目录中删除并撤消下面描述的配置更改来实现。

配置你的Shell

最后,在你的 shell 配置中包含 ASDF。对于zsh,将以下内容添加到~/.zshrc:

. $HOME/.asdf/asdf.sh

或者,如果您使用oh-my-zsh,添加asdf到您的插件配置。要在使用不同的 shell 时将 ASDF 包含在您的配置中,请参阅文档

安装插件

ASDF 使用插件系统来支持多种语言。对于典型的 Elixir 项目,您将需要 Elixir 和 Erlang 插件:

asdf plugin add erlang
asdf plugin add elixir

如果您的项目需要 Node.js,您也可以安装该nodejs插件。

安装 Erlang/OTP

安装 ASDF 及其插件后,您现在可以安装 Elixir 和 Erlang。如果您的项目有一个.tool-versions包含 和 条目的文件elixir,erlang您可以通过在项目内部运行以下命令来安装正确的版本:

asdf install

该.tool-versions文件很像.nvmrc和.ruby-version文件,只是它列出了多种语言的名称和版本。通常,此文件中的名称应与语言插件的名称匹配(例如nodejs,对于 Node.js)。

如果您还没有.tool-versions文件,或者想要全局安装 Elixir 和 Erlang,请使用以下命令查看所有可用 Erlang/OTP 版本的列表:

asdf list-all erlang
# ...
23.2
23.2.1
23.2.2
# ...

与其他版本管理器不同,ASDF 要求您指定要安装的语言的精确版本。要安装23.2.1Erlang 版本,请运行:

asdf install erlang 23.2.1

警告:从源代码编译 Erlang 时,此安装将需要一些时间。

Erlang 将根据您系统中可用的库编译模块。例如,某些功能(例如内置的观察者)需要wx库。您可能会在安装过程中看到有关省略模块的消息,这不会影响运行时的其余部分。

安装 Elixir

一旦安装了 Erlang 运行时,您就可以安装 Elixir。要查看所有可用版本的列表,请运行:

asdf list-all elixir
# ...
1.11.2
1.11.2-otp-21
1.11.2-otp-22
1.11.2-otp-23
# ...

请注意,每个 Elixir 版本都有多个使用不同主要版本的 Erlang/OTP 编译的版本。为了最大限度地提高 Elixir 和 Erlang 运行时之间的兼容性,请选择-otp-XY与您在上一步中安装的运行时的主要版本相匹配的版本。例如:

asdf install elixir 1.11.2-otp-23

安装 Elixir 比安装 Erlang/OTP 花费的时间要少得多。

设置版本

现在您已经安装了 Elixir 和 Erlang/OTP,您可以将选择的版本保存在项目中。从项目的根目录运行:

asdf local erlang 23.2.1
asdf local elixir 1.11.2-otp-23

将上述版本替换为您在安装过程中使用的版本。这将在您的项目中创建一个.tool-versions文件,该文件将指示 ASDF 使用哪些版本。如果您想设置全局或默认版本,请运行:

asdf global erlang 23.2.1
asdf global elixir 1.11.2-otp-23

这将在您的主目录中创建一个.tool-versions文件。只要项目没有指定自己的版本,ASDF 就会使用这些版本。

结论

ASDF 是 Elixir 项目的流行版本管理器,因为它同时管理 Elixir 和 Erlang 版本。在您的项目中包含一个.tool-versions文件,以帮助贡献者快速启动和运行,并且不要忘记利用-otp-XYElixir 的版本以获得最佳兼容性。

如果您想了解有关 Elixir 的更多信息以及它可以为您的下一个项目做什么,请在 Pluralsight 上查看Elixir:The Big Picture

Related Posts

2021 年你需要知道的关于 Erlang 的一切

今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl

Read More

Erlang JIT中基于类型的优化

这篇文章探讨了 Erlang/OTP 25 中基于类型的新优化,其中编译器将类型信息嵌入到 BEAM 文件中,以帮助JIT(即时编译器)生成更好的代码。 ## 两全其美 OTP 22 中引入的基于SSA的编译器处理步骤进行了复杂的类型分析,允许进行更多优化和更好的生成代码。然而,Erlang 编译器可以做什么样的优化是有限制的,因为 BEAM 文件必须

Read More

Erlang JIT之路

自从Erlang 存在,就一直有让它更快的需求和野心。这篇博文是一堂历史课,概述了主要的 Erlang 实现以及如何尝试提高 Erlang 的性能。 ## Prolog 解释器 Erlang 的第一个版本是在 1986 年在 Prolog 中实现的。那个版本的 Erlang 对于创建真正的应用程序来说太慢了,但它对于找出Erlang语言的哪些功能有用,哪

Read More