查看源代码 mix deps (Mix v1.16.2)

列出所有依赖项及其状态。

依赖项必须在 mix.exs 文件中以以下格式之一指定

{app, requirement}
{app, opts}
{app, requirement, opts}

其中

  • app 是一个原子
  • requirement 是一个 Version 需求或正则表达式
  • opts 是一个选项的关键字列表

例如

{:plug, ">= 0.4.0"}
{:gettext, git: "https://github.com/elixir-lang/gettext.git", tag: "0.1"}
{:local_dependency, path: "path/to/local_dependency"}

默认情况下,依赖项使用 Hex 包管理器 获取

{:plug, ">= 0.4.0"}

通过指定这些依赖项,Mix 将自动安装 Hex(如果之前没有安装)并下载适合您的项目的包。请注意,Hex 要求始终提供依赖项需求,否则会发出警告。

Mix 还支持 Git 和路径依赖项

{:foobar, git: "https://github.com/elixir-lang/foobar.git", tag: "0.1"}
{:foobar, path: "path/to/foobar"}

以及伞形依赖项

{:my_app, in_umbrella: true}

路径和伞形依赖项在发生更改时会由父项目自动重新编译。而可获取的依赖项,例如使用 :git 的依赖项,只有在获取/更新时才会重新编译。

依赖项的版本应按照语义版本控制格式化,并且需求必须按 Version 模块中定义的方式指定。

选项

下面我们详细介绍可用的选项。

依赖项定义选项

  • :app - 当设置为 false 时,不会读取此依赖项的应用程序文件。默认情况下,会读取应用程序文件

  • :env - 在依赖项上运行的环境(作为原子);默认为 :prod

  • :compile - 用于编译依赖项的命令(字符串);默认为 mixrebarmake 命令

  • :optional - 将依赖项标记为可选。在这种情况下,当前项目将始终包含可选依赖项,但任何其他依赖于当前项目的项目都不会被强制使用可选依赖项。但是,如果另一个项目自己包含可选依赖项,则此处指定的必需项和选项也将被应用。可选依赖项不会由应用程序启动。

  • :only - 依赖项仅在给定环境中可用,在声明开发或测试专用依赖项时很有用;默认情况下,依赖项在所有环境中都可用。此选项的值可以是单个环境(如 :dev)或环境列表(如 [:dev, :test]

  • :targets - 依赖项仅对给定目标可用。默认情况下,依赖项在所有环境中都可用。此选项的值可以是单个目标(如 :host)或环境列表(如 [:host, :rpi3]

  • :override - 如果设置为 true,依赖项将覆盖其他依赖项对自身的所有其他定义

  • :manager - Mix 还可以编译 Rebar3 和 Makefile 项目,并可以获取 Rebar3 项目的子依赖项。Mix 会尝试推断项目类型,但可以通过将此选项设置为 :mix:rebar3:make 来覆盖它。如果存在冲突的定义,将选择上述列表中的第一个管理器。例如,如果在不同树的部分中找到一个带有 :rebar3 作为管理器的依赖项,则会自动选择 :rebar3。您可以通过运行 mix deps 来查找管理器,并通过在顶层项目中设置 :override 选项来覆盖它。

  • :runtime - 依赖项是否属于运行时应用程序。如果您的 mix.exs 文件中的 def application 中没有提供 :applications 键,Mix 会自动将所有依赖项作为运行时应用程序包含在内,除非提供 runtime: false。默认为 true。

  • :system_env - 用于在加载或编译依赖项时设置为环境变量的二进制文件键值对的可枚举集合

Git 选项 (:git)

  • :git - Git 存储库 URI
  • :github - 用于指定来自 GitHub 的 Git 存储库的快捷方式,使用 :git
  • :ref - 要签出的引用(可能是分支、提交 SHA 或标签)
  • :branch - 要签出的 Git 分支
  • :tag - 要签出的 Git 标签
  • :submodules - 当 true 时,为存储库初始化子模块
  • :sparse - 签出 Git 存储库中的单个目录并将其用作您的 Mix 依赖项。搜索“稀疏 Git 签出”以了解更多信息。
  • :subdir - (自 v1.13.0 起)在相对于 git 签出的给定目录中搜索项目。这类似于 :sparse 选项,但它会执行完整的签出,而不是稀疏签出。

如果您的 Git 存储库需要身份验证,例如通过 URL 进行的基本用户名:密码 HTTP 身份验证,可以通过 Git 配置来实现,将访问规则保留在源代码控制之外。

$ git config --global url."https://YOUR_USER:[email protected]/".insteadOf "https://example.com/"

有关更多信息,请参见 git config 文档:https://git.js.cn/docs/git-config#git-config-urlltbasegtinsteadOf

路径选项 (:path)

  • :path - 依赖项的路径
  • :in_umbrella - 当 true 时,设置指向“../#{app}”的路径依赖项,与当前应用程序共享相同的环境

Hex 选项 (:hex)

有关 Hex 选项,请参见 Hex 使用文档

Deps 任务

mix deps 任务以以下格式列出所有依赖项

APP VERSION (SCM) (MANAGER)
[locked at REF]
STATUS

对于由 Hex 满足的依赖项,REF 是包校验和。

对于由 git 满足的依赖项,REF 是提交对象名称,可能包含分支或标签信息。

它支持以下选项

  • --all - 列出所有依赖项,无论指定的环境如何