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
Настройка
Для настройки Mix, модуль, который use Mix.Project, должен экспортировать функцию project/0, возвращающую список ключевых слов, представляющих конфигурацию проекта.
Эту конфигурацию можно прочитать с помощью Mix.Project.config/0. Обратите внимание, что config/0 не завершится ошибкой, если проект не определён; это позволяет многим задачам Mix работать без проекта.
Если задаче требуется определённый проект или необходимо получить доступ к специальной функции в проекте, задача может вызвать Mix.Project.get!/0, которая завершится с ошибкой Mix.NoProjectError в случае, если проект не определён.
Нет исчерпывающего списка всех опций, которые могут быть возвращены project/0, так как многие задачи Mix определяют свои собственные опции, которые они считывают из этой конфигурации. Например, посмотрите раздел «Настройка» в документации для задачи Mix.Tasks.Compile.
Вот несколько опций, которые не используются только одной задачей Mix (и поэтому будут документированы здесь):
:build_per_environment- еслиtrue, сборки будут по каждой среде. Еслиfalse, сборки будут выполняться в_build/sharedнезависимо от среды Mix. По умолчаниюtrue.:aliases- список псевдонимов задач. Для получения дополнительной информации, ознакомьтесь с разделом «Псевдонимы» в документации для модуляMix. По умолчанию[].:config_path- строка, представляющая путь к основному конфигурационному файлу. Смотритеconfig_files/0для получения дополнительной информации. По умолчанию"config/config.exs".:default_task- строка, представляющая задачу по умолчанию, которая будет выполненаmixпри отсутствии указанной задачи. По умолчанию"run".:deps- список зависимостей этого проекта. Для получения дополнительной информации обратитесь к документации задачиMix.Tasks.Deps. По умолчанию[].:deps_path- каталог, в котором хранятся зависимости. Также см.deps_path/1. По умолчанию"deps".:lockfile- имя файла блокировки, используемое семейством задачmix deps.*. По умолчанию"mix.lock".:preferred_cli_env- список ключевых слов кортежей{task, env}, гдеtask— имя задачи как атом (например,:"deps.get"), аenv— предпочтительная среда (например,:test). Эта опция переопределяет то, что задано задачами с атрибутом@preferred_cli_env(см. документацию дляMix.Task). По умолчанию[].:preferred_cli_target- список ключевых слов кортежей{task, target}, гдеtask— имя задачи как атом (например,:test), аtarget— предпочтительная цель (например,:host). По умолчанию[].
Для получения других опций следите за документацией отдельных задач Mix; хорошими примерами являются задача Mix.Tasks.Compile и все конкретные задачи компилятора (такие как Mix.Tasks.Compile.Elixir или Mix.Tasks.Compile.Erlang).
Обратите внимание, что иногда одна и та же опция конфигурации упоминается в документации для разных задач; это просто потому, что для многих задач общим является чтение и использование одной и той же опции конфигурации (например, :erlc_paths используется задачами mix compile.erlang, mix compile.yecc и другими).
Проекты Erlang
Mix можно использовать для управления проектами Erlang, не содержащими код Elixir. Чтобы убедиться, что задачи Mix работают корректно для проекта Erlang, language: :erlang должен быть частью конфигурации, возвращаемой project/0. Эта настройка также гарантирует, что Elixir не добавляется в качестве зависимости в сгенерированный файл .app или в сгенерированный escript с помощью mix escript.build, и так далее.
Описание
Функции
- app_path(config \\ config())
Возвращает путь к приложению внутри сборки.
- apps_paths(config \\ config())
Возвращает карту с путями до зависимых приложений-потомков.
- build_path(config \\ config())
Возвращает путь сборки для данного проекта.
- build_structure(config \\ config(), opts \\ [])
Строит структуру проекта для данного приложения.
- clear_deps_cache()
Очищает кэш зависимостей для текущей среды.
- compile_path(config \\ config())
Возвращает пути, к которым скомпилируется данный проект.
- config()
Возвращает конфигурацию проекта.
- config_files()
Возвращает список конфигурационных файлов проекта для этого проекта.
- config_mtime()
Возвращает последнее время изменения конфигурационных файлов.
- consolidation_path(config \\ config())
Возвращает путь, в котором хранятся консолидации протоколов.
- deps_apps()
Возвращает все имена приложений зависимостей.
- deps_path(config \\ config())
Возвращает путь, в котором хранятся зависимости для данного проекта.
- deps_paths(opts \\ [])
Возвращает полный путь всех зависимостей в виде карты.
- deps_scms(opts \\ [])
Возвращает SCM зависимостей в виде карты.
- ensure_structure(config \\ config(), opts \\ [])
Обеспечивает существование структуры проекта для данного проекта.
- get()
Получает текущий проект, если он есть.
- in_project(app, path, post_config \\ [], fun)
Выполняет данную
funвнутри данного проекта.- load_paths(config \\ config()) устарело
- manifest_path(config \\ config())
Возвращает путь, в котором хранятся манифесты.
- umbrella?(config \\ config())
Возвращает
trueеслиconfig— это конфигурация проекта-надстройки.
Функции
app_path(config \\ config())Source
Спецификации
app_path(keyword()) :: Path.t()
Возвращает путь к приложению внутри сборки.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.app_path() #=> "/path/to/project/_build/shared/lib/app"
apps_paths(config \\ config())Source
Спецификации
apps_paths(keyword()) :: %{optional(atom()) => Path.t()} | nil Возвращает карту с путями к дочерним приложениям-компонентам.
Эти пути основаны на конфигурациях :apps_path и :apps.
Если заданная конфигурация проекта определяет проект-компонент, то возвращается карта app => path, где app — это дочернее приложение, а path — его путь относительно корня проекта-компонента.
Если заданная конфигурация проекта не определяет проект-компонент, то возвращается nil.
Примеры
Mix.Project.apps_paths()
#=> %{my_app1: "apps/my_app1", my_app2: "apps/my_app2"} build_path(config \\ config())Source
Спецификации
build_path(keyword()) :: Path.t()
Возвращает путь сборки для данного проекта.
Если конфигурация не задана, используется конфигурация текущего проекта.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.build_path() #=> "/path/to/project/_build/shared"
Если :build_per_environment установлено в true, будет создана новая сборка для каждой среды:
Mix.env() #=> :dev Mix.Project.build_path() #=> "/path/to/project/_build/dev"
build_structure(config \\ config(), opts \\ [])Source
Спецификации
build_structure(keyword(), keyword()) :: :ok
Строит структуру проекта для данного приложения.
Параметры
-
:symlink_ebin— создание символьных ссылок на ebin вместо копирования
clear_deps_cache()Source
Спецификации
clear_deps_cache() :: :ok
Очищает кэш зависимостей для текущей среды.
Полезно, когда зависимости необходимо перезагрузить из-за изменения глобального состояния.
Например, Nerves использует эту функцию, чтобы принудительно перезагрузить все зависимости после обновления системной среды. Общий алгоритм:
- Nerves загружает все зависимости и ищет зависимости, специфичные для системы.
- Найдя зависимость, специфичную для системы, она загружается вместе с переменными среды.
- Nerves очищает кэш, принуждая к загрузке зависимостей снова.
- Зависимости загружаются снова, теперь с обновлённой средой.
compile_path(config \\ config())Source
Спецификации
compile_path(keyword()) :: Path.t()
Возвращает пути, к которым компилируется данный проект.
Если конфигурация не задана, используется конфигурация текущего проекта.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.compile_path() #=> "/path/to/project/_build/dev/lib/app/ebin"
config()Source
Спецификации
config() :: keyword()
Возвращает конфигурацию проекта.
Если проект не определён, возвращается список ключевых слов с значениями по умолчанию. Это позволяет многим задачам Mix работать без необходимости в подлежащем проекте.
Обратите внимание, что эта конфигурация кэшируется после того, как проект помещён в стек. Её вызов несколько раз не приведёт к перерасчёту.
Не используйте Mix.Project.config/0 для поиска конфигурации времени выполнения. Используйте её только для настройки аспектов вашего проекта (таких как каталоги компиляции), а не конфигурации времени выполнения вашего приложения.
config_files()Source
Спецификации
config_files() :: [Path.t()]
Возвращает список файлов конфигурации проекта для этого проекта.
Эта функция обычно используется в задачах компиляции для вызова полной перекомпиляции всякий раз, когда такие файлы конфигурации изменяются.
Она возвращает файл mix.exs, манифест блокировки и все файлы конфигурации в каталоге config, которые не начинаются с точки (например, .my_config.exs).
config_mtime()Source
Спецификации
config_mtime() :: posix_mtime when posix_mtime: integer()
Возвращает последнее время изменения из файлов конфигурации.
Эта функция обычно используется в задачах компиляции для вызова полной перекомпиляции всякий раз, когда такие файлы конфигурации изменяются. Поэтому mtime кэшируется, чтобы избежать обращений к файловой системе.
consolidation_path(config \\ config())Source
Спецификации
consolidation_path(keyword()) :: Path.t()
Возвращает путь, где хранятся консолидации протоколов.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.consolidation_path() #=> "/path/to/project/_build/dev/lib/my_app/consolidated"
Внутри проектов-компонентов:
Mix.Project.consolidation_path() #=> "/path/to/project/_build/dev/consolidated"
deps_apps()Source
Спецификации
deps_apps() :: [atom()]
Возвращает имена всех приложений-зависимостей.
Порядок, в котором они возвращаются, гарантированно отсортирован для правильного разрешения зависимостей. Например, если A зависит от B, то B будет перечислена раньше A.
deps_path(config \\ config())Source
Спецификации
deps_path(keyword()) :: Path.t()
Возвращает путь к хранилищу зависимостей для данного проекта.
Если конфигурация не задана, используется конфигурация текущего проекта.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.deps_path() #=> "/path/to/project/deps"
deps_paths(opts \\ [])Source
Спецификации
deps_paths(keyword()) :: %{optional(atom()) => Path.t()} Возвращает полный путь всех зависимостей в виде карты.
Параметры
-
:depth— возвращает только зависимости до указанного уровня глубины. Глубни 1 вернёт только зависимости верхнего уровня -
:parents— начинает обход зависимостей с указанных родителей вместо корня приложения
Примеры
Mix.Project.deps_paths()
#=> %{foo: "deps/foo", bar: "custom/path/dep"} deps_scms(opts \\ [])Source
Спецификации
deps_scms(keyword()) :: %{optional(atom()) => Mix.SCM.t()} Возвращает системы управления версиями (SCM) всех зависимостей в виде карты.
См. документацию модуля Mix.SCM для получения дополнительной информации о системах управления версиями (SCM).
Параметры
-
:depth— возвращает только зависимости до указанного уровня глубины. Глубни 1 вернёт только зависимости верхнего уровня -
:parents— начинает обход зависимостей с указанных родителей вместо корня приложения
Примеры
Mix.Project.deps_scms()
#=> %{foo: Mix.SCM.Path, bar: Mix.SCM.Git} ensure_structure(config \\ config(), opts \\ [])Source
Спецификации
ensure_structure(keyword(), keyword()) :: :ok
Обеспечивает существование структуры проекта для данного проекта.
В случае существования — это нетранзакционная операция. В противном случае — структура создаётся.
get()Source
Спецификации
get() :: module() | nil
Возвращает текущий проект, если он существует.
Если текущий проект не определён, возвращается nil. Это может произойти в случаях, когда в текущей директории нет mix.exs.
Если вы ожидаете определения проекта, т. е. это требование текущей задачи, вы должны вызвать get!/0 вместо этого.
get!()Source
Спецификации
get!() :: module()
То же, что и get/0, но вызывает исключение, если текущего проекта нет.
Обычно вызывается задачами, которым нужны дополнительные функции, определенные для проекта. Поскольку такие задачи обычно зависят от определения проекта, эта функция вызывает исключение Mix.NoProjectError в случае отсутствия проекта.
in_project(app, path, post_config \\ [], fun)Source
Спецификации
in_project(atom(), Path.t(), keyword(), (module() -> result)) :: result when result: term()
Выполняет данную fun внутри заданного проекта.
Эта функция изменяет текущую рабочую директорию и загружает проект в заданной директории в стек проекта.
Можно передать post_config, который будет объединён с конфигурацией проекта.
fun вызывается с именем модуля заданного Mix.Project. Возвращаемое значение этой функции — возвращаемое значение fun.
Примеры
Mix.Project.in_project(:my_app, "/path/to/my_app", fn module ->
"Mix project is: #{inspect(module)}"
end)
#=> "Mix project is: MyApp.MixProject" load_paths(config \\ config())Source
manifest_path(config \\ config())Source
Спецификации
manifest_path(keyword()) :: Path.t()
Возвращает путь, где хранятся манифесты.
По умолчанию они хранятся в пути приложения внутри каталога сборки. Для проектов-оболочек путь манифеста устанавливается в корень каталога сборки. Пути могут быть изменены в будущих версиях.
Возвращаемый путь будет расширен.
Примеры
Mix.Project.manifest_path() #=> "/path/to/project/_build/shared/lib/app/.mix"
umbrella?(config \\ config())Source
Спецификации
umbrella?(keyword()) :: boolean()
Возвращает true, если config — конфигурация проекта-оболочки.
Без аргументов сообщает, является ли текущий проект проектом-оболочкой.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.12.0/Mix.Project.html