Spec-Zone.ru › Elixir 1.12

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()

Получает текущий проект, если он есть.

get!()

То же, что и get/0, но генерирует исключение, если текущий проект отсутствует.

in_project(app, path, post_config \\ [], fun)

Выполняет данную fun внутри данного проекта.

load_paths(config \\ config()) устарело
manifest_path(config \\ config())

Возвращает путь, в котором хранятся манифесты.

umbrella?(config \\ config())

Возвращает true если config — это конфигурация проекта-надстройки.

END_OF_DOCUMENT_MARKER ```

Функции

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 использует эту функцию, чтобы принудительно перезагрузить все зависимости после обновления системной среды. Общий алгоритм:

  1. Nerves загружает все зависимости и ищет зависимости, специфичные для системы.
  2. Найдя зависимость, специфичную для системы, она загружается вместе с переменными среды.
  3. Nerves очищает кэш, принуждая к загрузке зависимостей снова.
  4. Зависимости загружаются снова, теперь с обновлённой средой.

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

Эта функция устарела. Используйте Mix.Project.compile_path/1 вместо неё.

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

Spec-Zone.ru

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