Spec-Zone.ru › Elixir 1.12

Mix.Задача поведение

Обеспечивает удобства для создания, загрузки и обработки задач Mix.

Задача Mix может быть определена с помощью Mix.Task в модуле, имя которого начинается с Mix.Tasks. и который определяет функцию run/1. Обычно модули задач находятся внутри каталога lib/mix/tasks/, а имена файлов используют точки в качестве разделителей вместо нижних подчеркиваний (например, deps.clean.ex) — хотя в конечном итоге имя файла не имеет значения.

Например:

# lib/mix/tasks/echo.ex
defmodule Mix.Tasks.Echo do
  @moduledoc "Printed when the user requests `mix help echo`"
  @shortdoc "Echoes arguments"

  use Mix.Task

  @impl Mix.Task
  def run(args) do
    Mix.shell().info(Enum.join(args, " "))
  end
end

Имя команды будет соответствовать части имени модуля, следующей за Mix.Tasks.. Например, имя модуля Mix.Tasks.Deps.Clean соответствует имени задачи deps.clean.

Функция run/1 получит список всех аргументов командной строки, переданных из терминала пользователя.

Например, если была бы проверена args в задаче echo выше, то можно было бы увидеть что-то вроде этого:

mix echo 'A and B' C --test
["A and B", "C", "--test"]

Определите атрибут @shortdoc, если хотите сделать задачу публично видимой в mix help. Опустите этот атрибут, если вы не хотите, чтобы ваша задача была отображена в mix help.

Если задача имеет требования, они могут быть перечислены с помощью атрибута @requirements. Например:

@requirements ["app.config"]

Задачи, как правило, зависят от задачи "app.config" когда им требуется доступ к коду текущего проекта со всеми приложениями, уже настроенными, или от задачи «app.start», когда также требуется, чтобы эти приложения уже были запущены:

@requirements ["app.start"]

Вы также можете запустить задачи напрямую с помощью run/2.

Атрибуты

В задачах Mix доступно несколько атрибутов для их настройки в Mix:

  • @shortdoc — делает задачу публичной с кратким описанием, которое отображается в mix help
  • @recursive — выполняет задачу рекурсивно в проектах-зонтиках
  • @requirements — список необходимых задач, которые должны быть выполнены перед задачей
  • @preferred_cli_env — рекомендует среду для выполнения задачи. Используется только если MIX_ENV ещё не установлено. Обратите внимание, что @preferred_cli_env не загружается из зависимостей, так как нам нужно знать среду, чтобы загрузить сами зависимости. В таких случаях вы можете установить конфигурацию preferred_cli_env в def project вашем mix.exs

Документация

Пользователи могут прочитать документацию по публичным задачам Mix, выполнив mix help my_task. Отображаемая документация является @moduledoc модуля задачи.

Сводка

Типы

task_module()
task_name()

Функции

alias?(task)

Проверяет, является ли данное имя task псевдонимом.

all_modules()

Возвращает все загруженные модули задач.

clear()

Очищает все вызванные задачи, позволяя их повторно вызвать.

get(task)

Принимает имя задачи и возвращает соответствующий модуль задачи, если он существует.

get!(task)

Принимает имя задачи и получает соответствующий модуль задачи.

load_all()

Загружает все задачи во всех путях кода.

load_tasks(dirs)

Загружает все задачи в указанных paths.

moduledoc(module)

Получает moduledoc для данной задачи module.

preferred_cli_env(task)

Получает предпочтительную среду CLI для задачи.

recursing?()

Указывает, рекурсивно ли выполняется текущая задача.

recursive(module)

Проверяет, нужно ли выполнять задачу рекурсивно для всех подприложений в проектах-зонтиках.

reenable(task)

Повторно включает задачу, чтобы ее можно было снова выполнить в стеке.

requirements(module)

Получает список требований для заданной задачи.

rerun(task, args \\ [])

Повторно выполняет task с заданными аргументами.

run(task, args \\ [])

Условно выполняет задачу (или псевдоним) с заданными args.

shortdoc(module)

Получает краткое описание для данной задачи module.

task?(module)

Возвращает true если данный модуль является задачей.

task_name(module)

Возвращает имя задачи для данного module.

Обработчики событий

run(command_line_args)

Задача должна реализовать run, который получает список аргументов командной строки.

Типы

task_module()Source

Спецификации

task_module() :: atom()

task_name()Source

Спецификации

task_name() :: String.t() | atom()
END_OF_DOCUMENT_MARKER

Функции

alias?(task)Source

Specs

alias?(task_name()) :: boolean()

Проверяет, является ли заданное task имя псевдонимом.

Возвращает false, если заданное имя не является псевдонимом или если это не задача.

Для получения дополнительной информации о псевдонимах задач, обратитесь к разделу "Псевдонимы" в документации для Mix.

all_modules()Source

Specs

all_modules() :: [task_module()]

Возвращает все загруженные модули задач.

Модули, которые еще не загружены, не отобразятся. Проверьте load_all/0, если хотите предварительно загрузить все задачи.

clear()Source

Specs

clear() :: :ok

Очищает все выполненные задачи, позволяя их повторное выполнение.

Эта операция не рекурсивна.

get(task)Source

Specs

get(task_name()) :: task_module() | nil

Получает имя задачи и возвращает соответствующий модуль задачи, если он существует.

Возвращает nil если модуль не найден, если это псевдоним или если это не допустимая Mix.Task.

get!(task)Source

Specs

get!(task_name()) :: task_module()

Получает имя задачи и извлекает соответствующий модуль задачи.

Исключения

  • Mix.NoTaskError - генерируется, если задача не найдена
  • Mix.InvalidTaskError - генерируется, если задача не является допустимой Mix.Task

load_all()Source

Specs

load_all() :: [task_module()]

Загружает все задачи во всех путях кода.

load_tasks(dirs)Source

Specs

load_tasks([List.Chars.t()]) :: [task_module()]

Загружает все задачи в заданных paths.

moduledoc(module)Source

Specs

moduledoc(task_module()) :: String.t() | nil | false

Получает moduledoc для заданной задачи module.

Возвращает moduledoc или nil.

preferred_cli_env(task)Source

Specs

preferred_cli_env(task_name()) :: atom() | nil

Получает предпочтительную среду командной строки для задачи.

Возвращает среду (например, :test, или :prod), или nil.

recursing?()Source

Specs

recursing?() :: boolean()

Указывает, является ли текущая задача рекурсивной.

Возвращает true, если задача отмечена как рекурсивная и выполняется внутри проекта umbrella.

recursive(module)Source

Specs

recursive(task_module()) :: boolean()

Проверяет, должна ли задача выполняться рекурсивно для всех подприложений в проектах umbrella.

Возвращает true или false.

reenable(task)Source

Specs

reenable(task_name()) :: :ok

Позволяет повторно использовать заданную задачу, чтобы ее можно было выполнить снова в стеке.

Псевдоним и обычный стек снова активируются при вызове этой функции.

Если проект umbrella повторно активирует задачу, она повторно активируется для всех дочерних проектов.

requirements(module)Source

Specs

requirements(task_module()) :: []

Получает список требований для заданной задачи.

Возвращает список строк, где строка ожидает задачу, за которой необязательно следуют ее аргументы.

rerun(task, args \\ [])Source

Specs

rerun(task_name(), [any()]) :: any()

Повторно выполняет task с указанными аргументами.

Эта функция повторно выполняет заданную задачу; для этого она сначала повторно активирует задачу, а затем выполняет ее как обычно.

run(task, args \\ [])Source

Specs

run(task_name(), [any()]) :: any()

Условно выполняет задачу (или псевдоним) с указанными args.

Если существует задача, соответствующая заданному имени задачи, и она еще не вызвана, это выполнит задачу с указанными args и вернет результат.

Если для данного имени задачи определен псевдоним, будет вызван псевдоним вместо исходной задачи.

Если задача или псевдоним уже вызваны, последующие вызовы run/2 будут прерваны без выполнения и возвращать :noop.

Обратите внимание: по умолчанию задачи будут выполняться только один раз, даже при многократных вызовах! Если вам нужно выполнить задачу несколько раз, необходимо повторно активировать ее с помощью reenable/1 или вызвать ее с помощью rerun/2.

run/2 генерирует исключение, если псевдоним или задача не найдены или задача некорректна. Подробнее см. get!/1.

shortdoc(module)Source

Specs

shortdoc(task_module()) :: String.t() | nil

Получает краткое описание для заданной задачи module.

Возвращает краткое описание или nil.

task?(module)Source

Specs

task?(task_module()) :: boolean()

Возвращает true если данный модуль является задачей.

task_name(module)Source

Specs

task_name(task_module()) :: task_name()

Возвращает имя задачи для данного module.

Примеры

iex> Mix.Task.task_name(Mix.Tasks.Test)
"test"

Обработчики

run(command_line_args)Source

Specs

run(command_line_args :: [binary()]) :: any()

Задача должна реализовать run, которая получает список аргументов командной строки.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.12.0/Mix.Task.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API