不使用Mix时Elixir独立脚本如何导入第三方依赖模块
无Mix项目结构下Elixir独立脚本加载第三方依赖方案
CI场景运行轻量Elixir脚本时,若不想引入完整Mix项目的冗余文件,直接使用Elixir 1.12及以上版本内置的Mix.install/2即可,无需额外创建mix.exs、mix.lock等项目文件,完全适配elixir命令直接运行单文件脚本的场景。
工作流配置示例
修改GitHub Actions配置如下即可正常加载第三方依赖:
- uses: erlef/setup-beam@v1 with: otp-version: ${{ env.OTP_VERSION }} elixir-version: ${{ env.ELIXIR_VERSION }} # 需指定1.12及以上版本 - id: main run: | # 脚本开头直接声明所需第三方依赖 Mix.install([ :jason # 替换为实际需要的依赖包,例如JSON处理常用的jason ]) defmodule DoStuff do def run do # 直接调用依赖提供的模块即可 %{ci: true, status: "ok"} |> Jason.encode!() |> IO.puts() end end DoStuff.run() shell: elixir {0}
核心说明
- 原写法失效原因:Elixir默认不会自动拉取第三方依赖,也不会自动将第三方包的BEAM文件路径加入代码加载路径,直接
import对应模块会触发模块不存在的错误。 Mix.install/2会在脚本首次运行时自动完成依赖拉取、编译操作,依赖声明语法和普通Mix项目完全一致,支持Hex官方包、Git源依赖、本地路径依赖。- 运行脚本时不需要给elixir命令加
-r参数,直接传入脚本文件路径即可。 - 若要提升CI运行速度,可以给工作流添加缓存配置,缓存
~/.mix和脚本运行生成的_build目录,避免每次CI运行重复下载编译依赖。
如果使用1.12以下的老旧Elixir版本,才需要手动执行依赖拉取、将依赖编译产物路径加入ERL代码加载路径,流程繁琐,无特殊需求时直接升级Elixir版本使用Mix.install/2是成本最低的方案。
内容的提问来源于stack exchange,提问作者djfinnoy
相关产品推荐
相关产品推荐

