我是 Elixir 的新手,所以我不知道如何回答这个问题
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]
我很困惑——为什么要求安装
hex-2.1.1.ez
而不是 hex-2.1.1
?有关系吗?
我认为这与我的环境有关,而不是复制原始教程的环境。
昨天,我按照标准的Elixir安装指南,并使用
asdf
方法成功安装了Elixir和Erlang。然后我按照Phoenix框架指南成功构建并运行了我的第一个项目。
今天,我回来打开了一个新终端,我正在遵循 Elixir 的另一个项目指南。快开始时,它说要跑
mix local.hex
。啊哈!我记得 Mix,与 Python 中的 pip
非常接近,还有一些关于 Hex 的东西,尽管我不清楚最接近的等价物。所以我有信心它应该可以工作,但后来我得到了上面的问题。也许它仍然有效,但我想无论如何我都会伸出援手,所以我确保我有一个良好的基础。
我确实把这个放在我的
.bashrc
中:
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
我可以运行
erl
和 elixir
和 mix
就好了。
在此之前,我在那里设置了 IntelliJ 和 Elixir 插件,并将其指向我已经通过
asdf
安装的现有 Elixir 和 Erlang SDK,所以我认为它没有进行任何更改。目前的问题与 IntelliJ 无关,只是命令行。
如果你阅读这两个文件路径,你可以看到它们使用的是不同的 Elixir 版本。
1.17.2-otp-27
和
1.16.0
我无法准确说出您的环境中发生的情况,但这里有一些针对
asdf
的建议,这些建议始终相关。
asdf
很像 pyenv
,其中您有“全局”和“本地”版本。
global
版本是“全局”设置的,并且是默认/后备版本。
您可以这样设置:
asdf global elixir 1.17.2-otp-27
asdf global erlang 27.0
现在当你跑步时,例如
iex
,它将使用这些版本。
要设置本地版本,首先要意识到这些版本保存在您当前的目录中。
所以做这样的事情:
cd ~/my-github-projects/cool-new-project
# now you are in your project directory
asdf local elixir 1.16.0
asdf local erlang 26.0
或者您想要该项目的任何版本。
这些
asdf local
命令将创建或附加到名为: 的文件
.tool-versions
此“工具版本”文件是
asdf
将自动读取的内容。如果您位于子目录中,则 asdf 将检查该文件的父目录。如果在父目录中没有找到它,那么它将检查父目录的父目录。它将在目录中不断向上移动,直到位于您的主目录中,然后它将恢复为全局版本。
所以主要问题是看看你的项目目录下是否有
.tool-versions
文件,像这样:
ls -lah
如果需要,您甚至可以手动编辑此
.tool-versions
文件。
请注意,它可能包含许多其他内容的版本。
如果您下载/克隆了包含
.tool-versions
文件的新项目,那么您只需运行即可安装所有内容:
asdf install
您可以使用
asdf
安装许多其他工具,例如postgres
、nodejs
等
我希望这有帮助!