Spec-Zone.ru › Elixir 1.12

mix compile.elixir

Компилирует файлы исходного кода Elixir.

Elixir достаточно умён, чтобы перекомпилировать только изменённые файлы и их зависимости. Это означает, что если lib/a.ex вызывает функцию, определённую в lib/b.ex, всякий раз, когда lib/b.ex изменяется, lib/a.ex также перекомпилируется.

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

__mix_recompile__?/0

Модуль может экспортировать функцию __mix_recompile__?/0, которая может вызвать перекомпиляцию модуля с использованием пользовательских правил. Например, @external_resource уже добавляет зависимость от внешнего файла во время компиляции, однако для зависимости от динамического списка файлов мы можем сделать следующее:

defmodule MyModule do
  paths = Path.wildcard("*.txt")
  paths_hash = :erlang.md5(paths)

  for path <- paths do
    @external_resource path
  end

  def __mix_recompile__?() do
    Path.wildcard("*.txt") |> :erlang.md5() != unquote(paths_hash)
  end
end

Компилятор вызывает __mix_recompile__?/0 для каждого компилируемого (или ранее компилированного) модуля, и поэтому очень важно выполнить там как можно меньше работы, чтобы не замедлить компиляцию.

Если модуль имеет @compile {:autoload, false}, __mix_recompile__?/0 не будет использоваться.

Параметры командной строки

  • --verbose - выводит каждый компилируемый файл
  • --force - принудительно производит компиляцию независимо от времени модификации
  • --docs (--no-docs) - прикрепляет (или нет) документацию к скомпилированным модулям
  • --debug-info (--no-debug-info) - прикрепляет (или нет) отладочную информацию к скомпилированным модулям
  • --ignore-module-conflict - не выводит предупреждения, если модуль был ранее определён
  • --warnings-as-errors - обрабатывает предупреждения в текущем проекте как ошибки и возвращает ненулевой код выхода
  • --long-compilation-threshold N - устанавливает порог «длительной компиляции» (в секундах) на N (см. документацию для Kernel.ParallelCompiler.compile/2)
  • --profile - если установлено значение time, выводит информацию о времени выполнения этапов компиляции
  • --all-warnings - выводит предупреждения даже из файлов, которые не требуют перекомпиляции
  • --tracer - добавляет отслеживатель компилятора в дополнение к любому, указанному в файле mix.exs

Настройка

  • :elixirc_paths - каталоги для поиска файлов исходного кода. По умолчанию ["lib"].

  • :elixirc_options - параметры компиляции, которые применяются к компилятору Elixir. См. Code.put_compiler_option/2 для получения полного списка параметров. Эти параметры часто можно переопределить из командной строки с помощью вышеперечисленных переключателей.

  • [xref: [exclude: ...]] - список module или {module, function, arity}, которые не должны вызывать предупреждения в случае неопределённых модулей или предупреждений об отсутствии приложения.

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

Spec-Zone.ru

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