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 модуля задачи.
Сводка
Типы
Функции
- 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, который получает список аргументов командной строки.
Типы
Функции
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