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.11.2/Mix.Tasks.Compile.Elixir.html