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

在配置的应用程序中评估给定代码。

$ mix eval "IO.puts(1 + 2)"

给定的代码在当前应用程序配置后进行评估,但不会加载或启动它们(某些应用程序可能在启动过程中加载,但不能保证)。有关在已启动的应用程序中运行应用程序和脚本,请参见 mix run

此任务旨在镜像发布版本中的 bin/my_app eval 命令。它通常用于调用应用程序中已定义的函数。例如,您可能有一个类似于以下内容的模块

defmodule MyApp.ReleaseTasks do
  def migrate_database do
    Application.load(:my_app)
    ...
  end
end

定义后,您可以通过 mix eval 或通过发布版本中的 bin/my_app eval 来调用此函数,如下所示

$ mix eval MyApp.ReleaseTasks.migrate_database
$ bin/my_app eval MyApp.ReleaseTasks.migrate_database

如您所见,当前应用程序必须在您的任务中显式加载或启动,方法是调用 Application.load/1Application.ensure_all_started/1。这使您可以完全控制应用程序启动生命周期。有关更多信息,请参见 Application 模块。

此任务会自动重新启用,因此可以多次使用不同的参数调用它。

命令行选项

  • --no-archives-check - 不检查存档
  • --no-compile - 即使文件需要编译,也不编译
  • --no-deps-check - 不检查依赖项
  • --no-elixir-version-check - 不检查 mix.exs 中的 Elixir 版本
  • --no-mix-exs - 即使没有 mix.exs,也允许命令运行