为何Elixir的mix要求安装带.ez后缀的同版本hex?
Elixir运行
mix local.hex的疑问解答 问题场景
运行mix local.hex时收到以下提示:
$ mix local.hex Found existing entry: /home/civfan/.asdf/installs/elixir/1.17.2-otp-27/.mix/archives/hex-2.1.1 Are you sure you want to replace it with "https://builds.hex.pm/installs/1.16.0/hex-2.1.1.ez"? [Yn]
当前终端环境已通过asdf配置为Elixir v1.17.2:
$ asdf list elixir *1.17.2-otp-27 erlang *27.0.1 $ asdf current elixir 1.17.2-otp-27 /home/civfan/.tool-versions erlang 27.0.1 /home/civfan/.tool-versions $ elixir --version Erlang/OTP 27 [erts-15.0.1] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns] Elixir 1.17.2 (compiled with Erlang/OTP 27)
此前通过apt安装的Erlang已用purge清除,asdf配置正常,可正常运行erl、elixir、mix命令。
疑问解答
1. 为何要求用hex-2.1.1.ez替换hex-2.1.1,二者仅差.ez后缀?
本地已存在的hex-2.1.1是解压后的Hex归档目录,远程的hex-2.1.1.ez是未解压的归档文件。mix local.hex命令会自动下载.ez文件并解压到指定目录,替换已有的解压后目录——本质是用同版本的官方归档重新覆盖安装Hex,后缀差异只是文件形式不同,内容完全一致。
2. 我的环境是Elixir v1.17.2,为何显示要安装对应v1.16.0的hex?
路径中的1.16.0是Hex兼容的最低Elixir版本,不是要求安装对应Elixir 1.16.0的Hex版本。Hex会根据当前Elixir版本自动匹配兼容的安装包,这个路径标识仅代表该Hex包支持从Elixir 1.16.0开始的版本,完全兼容你的Elixir 1.17.2,无需担心版本不匹配问题。
3. .ez后缀在Elixir/Erlang中有特殊含义吗?
是的,.ez是Erlang/Elixir生态中的标准归档文件格式,本质是经过压缩的Erlang应用包,包含编译后的BEAM字节码、配置文件和依赖等内容。Erlang的code模块可以直接加载.ez格式的归档,Elixir的mix工具也用它来分发本地工具(如Hex、Phoenix),方便快速安装和管理。
内容的提问来源于stack exchange,提问作者CivFan
相关产品推荐
相关产品推荐

