Spec-Zone.ru › Elixir 1.11

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

Характеристики

app_path(keyword()) :: Path.t()

Возвращает путь к приложению внутри сборки.

Возвращаемый путь будет расширен.

Примеры

Mix.Project.app_path()
#=> "/path/to/project/_build/shared/lib/app"

apps_paths(config \\ config())

Характеристики

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

Характеристики

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 \\ [])

Характеристики

build_structure(keyword(), keyword()) :: :ok

Создает структуру проекта для данного приложения.

Параметры

  • :symlink_ebin — создание символической ссылки ebin вместо копирования

clear_deps_cache()

Характеристики

clear_deps_cache() :: :ok

Очищает кэш зависимостей для текущего окружения.

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

Например, Nerves использует эту функцию для принудительной перезагрузки всех зависимостей после обновления системной среды. Общий процесс выглядит так:

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

compile_path(config \\ config())

Характеристики

compile_path(keyword()) :: Path.t()

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

Если конфигурация не задана, используется конфигурация текущего проекта.

Возвращаемый путь будет расширен.

Примеры

Mix.Project.compile_path()
#=> "/path/to/project/_build/dev/lib/app/ebin"

config()

Характеристики

config() :: keyword()

Возвращает конфигурацию проекта.

Если проект не определен, возвращается список ключевых слов со значениями по умолчанию. Это позволяет многим задачам Mix работать без необходимости в базовом проекте.

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

Не используйте Mix.Project.config/0 для поиска конфигурации во время выполнения. Используйте его только для настройки аспектов вашего проекта (например, каталогов компиляции), а не конфигурации вашего приложения во время выполнения.

config_files()

Характеристики

config_files() :: [Path.t()]

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

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

Она возвращает файл mix.exs, манифест блокировки и все файлы конфигурации в каталоге config, которые не начинаются с точки (например, .my_config.exs).

config_mtime()

Характеристики

config_mtime() :: posix_mtime when posix_mtime: integer()

Возвращает последнее время изменения файлов конфигурации.

Эта функция обычно используется в задачах компиляции для запуска полной перекомпиляции при изменении таких файлов конфигурации. По этой причине mtime кэшируется, чтобы избежать запросов к файловой системе.

consolidation_path(config \\ config())

Характеристики

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

Характеристики

deps_apps() :: [atom()]

Возвращает все имена приложений-зависимостей.

Порядок, в котором они возвращаются, гарантированно отсортирован для правильного разрешения зависимостей. Например, если A зависит от B, то B будет указан до A.

deps_path(config \\ config())

Характеристики

deps_path(keyword()) :: Path.t()

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

Если конфигурация не задана, используется конфигурация текущего проекта.

Возвращаемый путь будет расширен.

Примеры

Mix.Project.deps_path()
#=> "/path/to/project/deps"

deps_paths(opts \\ [])

Характеристики

deps_paths(keyword()) :: %{optional(atom()) => Path.t()}

Возвращает полный путь всех зависимостей в виде карты.

Параметры

  • :depth — возвращает только зависимости до заданного уровня вложенности; глубина 1 вернёт только зависимости верхнего уровня
  • :parents — начинает обход зависимостей с указанных родителей вместо корня приложения

Примеры

Mix.Project.deps_paths()
#=> %{foo: "deps/foo", bar: "custom/path/dep"}

deps_scms(opts \\ [])

Характеристики

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 \\ [])

Характеристики

ensure_structure(keyword(), keyword()) :: :ok

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

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

get()

Характеристики

get() :: module() | nil

Возвращает текущий проект, если он есть.

Если текущего проекта нет, возвращается nil. Это может произойти в тех случаях, когда в текущем каталоге нет mix.exs.

Если ожидается, что проект будет определен, т. е. это требование текущей задачи, следует вызвать get!/0 вместо этого.

get!()

Характеристики

get!() :: module()

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

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

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

Характеристики

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

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

manifest_path(config \\ config())

Характеристики

manifest_path(keyword()) :: Path.t()

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

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

Возвращаемый путь будет расширен.

Примеры

Mix.Project.manifest_path()
#=> "/path/to/project/_build/shared/lib/app/.mix"

umbrella?(config \\ config())

Характеристики

umbrella?(keyword()) :: boolean()

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

При вызове без аргументов указывает, является ли текущий проект проектом-зонтиком.

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

Spec-Zone.ru

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