Mix.Project

定义和操作 Mix 项目。

Mix 项目是通过在模块中调用 use Mix.Project 来定义的,通常放置在 mix.exs 文件中:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0"
    ]
  end
end

当你使用 use Mix.Project 时,它告诉 Mix 一个新项目已被定义,因此所有 Mix 任务都会使用你的模块作为起点。

配置

为了配置 Mix,使用 use Mix.Project 的模块需要导出一个 project/0 函数,该函数返回一个关键字列表,代表项目的配置。

这个配置可以通过 Mix.Project.config/0 读取。注意,如果没有定义项目, config/0 也不会失败;这使得许多 Mix 任务在没有项目的情况下也能工作。

调用 Mix.Project.config/0 之前,你需要先使用 iex -S mix

如果一个任务需要项目被定义,或者需要访问项目中的特定函数,可以调用 Mix.Project.get!/0 ,如果项目没有定义,它会抛出 Mix.NoProjectError 异常。

project/0 返回的选项列表并不固定,因为许多 Mix 任务都会从这个配置列表中读取自定义的选项。

以下是一些广泛使用的选项:

  • :build_per_environment - 如果为 true ,编译时会针对每个环境(devtestprod)进行构建。如果为 false ,不管是哪个环境,编译结果都会放在 _build/shared 中。默认为 true
  • :aliases - 任务别名列表。更多信息,查看 Mix 模块文档中的 “Aliases” 部分。默认为 []
  • :config_path - 主配置文件路径。默认为 "config/config.exs"
  • :deps - 该项目的依赖列表。参考 Mix.Tasks.Deps 任务的文档以获取更多信息。默认为 []
  • :deps_path - 存储依赖的目录。默认为 "deps"
  • :lockfile - mix deps.* 系列任务使用的 lock 文件名称,用来固化依赖版本。默认为 "mix.lock"

Mix 任务自定义的配置也是从 def project 中获取的。

注意,不同的任务可能共享相同的配置选项。例如, :erlc_paths 配置就同时被 mix compile.erlangmix compile.yecc 和其他任务使用。

CLI 配置

Mix 最常见的调用方式是从命令行调用。为此,你可以定义一个 cli/0 函数,定制从命令行执行的默认值。例如:

def cli do
  [
    default_task: "phx.server",
    preferred_envs: [docs: :docs]
  ]
end

上述示例将默认任务( iex -S mixmix)设置为 phx.server 。它还将 “mix docs” 任务的默认环境设置为 “docs”。

可用的 CLI 配置如下:

  • :default_env - 当没有给定环境且没有设置 MIX_ENV 时使用的默认环境。
  • :default_target - 当没有给定目标且没有设置 MIX_TARGET 时使用的默认目标。
  • :default_task - 当没有给定任务时调用的默认任务。
  • :preferred_envs - 一个 {task, env} 元组构成的关键字列表,其中 task 是原子类型的任务名称(例如 :"deps.get" ), env 是环境(例如 :test)。
  • :preferred_targets - 一个 {task, target} 元组的关键字列表,其中 task 是原子类型的任务名称(例如 :test), target 是目标(例如 :host)。

Erlang 项目

Mix 可以用来管理没有任何 Elixir 代码的 Erlang 项目。为了确保 Mix 任务正确地管理 Erlang 项目, project/0 返回的配置中必须包含 language: :erlang 。这个设置还确保 Elixir 不会被作为依赖添加到生成的 .app 文件或使用 mix escript.build 生成的 escript 等文件中。

调用这个模块

这个模块包含许多返回项目信息和元数据的函数。然而,由于 Mix 不会包含在发布版中,我们建议只在 Mix 任务中使用这个模块中的函数。如果你需要配置你自己的应用,请使用应用环境。例如,不要这样做:

def some_config do
  Mix.Project.config()[:some_config]
end

也不要这样做:

@some_config Mix.Project.config()[:some_config]

而是应该这样:

def some_config do
  Application.get_env(:my_app, :some_config)
end

或者这样:

@some_config Application.compile_env(:my_app, :some_config)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值