mix escript.build
Создаёт escript для проекта.
Escript — это исполняемый файл, который можно вызвать из командной строки. Escript может выполняться на любой машине с установленным Erlang/OTP и по умолчанию не требует установки Elixir, так как Elixir встроен в escript.
Эта задача гарантирует, что проект и его зависимости скомпилированы и упакованы внутри escript. Перед вызовом mix escript.build, необходимо лишь определить ключ :escript с опцией :main_module в вашем файле mix.exs.
escript: [main_module: MyApp.CLI]
Escripts следует использовать для обмена скриптами между разработчиками, а не для развертывания. Для запуска живых систем используйте mix run или создание релизов. Обратитесь к модулю Application для получения дополнительной информации о жизненных циклах систем.
Все конфигурации, определённые в config/config.exs, будут включены в escript. config/runtime.exs также включается для Elixir escripts. После загрузки конфигурации, эта задача запускает текущее приложение. Если этого не нужно, установите конфигурацию :app в значение nil.
Эта задача также удаляет документацию и отладочные фрагменты из скомпилированных .beam файлов, чтобы уменьшить размер escript. Если этого не требуется, проверьте опцию :strip_beams.
Примечание: escripts не поддерживают проекты и зависимости, которым необходимо хранить или читать артефакты из каталога priv.
Командные параметры
Ожидает те же параметры командной строки, что и mix compile.
Настройка
Следующая опция должна быть указана в вашем mix.exs под ключом :escript:
-
:main_module— модуль, который будет вызван после запуска escript. Модуль должен содержать функцию с именемmain/1, которая получит аргументы командной строки. По умолчанию аргументы передаются в виде списка бинарных данных, но если проект настроен сlanguage: :erlang, они будут передаваться в виде списка charlist.
Остальные опции можно указать для дальнейшей настройки escript:
:name— имя генерируемого escript. По умолчанию — имя приложения.:path— путь для записи escript. По умолчанию — имя приложения.:app— приложение, которое запускается вместе с escript. По умолчанию — имя приложения. Установите значениеnil, если приложение запускаться не должно.:strip_beams— еслиtrueудаляет код BEAM в escript, чтобы удалить фрагменты, не требующиеся во время выполнения, такие как отладочная информация и документация. Может быть установлено в [keep: ['Docs', 'Dbgi']], чтобы удалить фрагменты, сохраняя при этом некоторые фрагменты, такие как документация и отладочная информация. По умолчанию —true.-
:embed_elixir— еслиtrueвстраивает Elixir и его дочерние приложения (ex_unit,mix, и т. п.), упомянутые в списке:applicationsвнутри функцииapplication/0вmix.exs.По умолчанию —
trueдля проектов Elixir,falseдля проектов Erlang. Примечание: если вы установите это значение вfalseдля проекта Elixir, вам нужно будет добавить пути к каталогамebinElixir в переменную окруженияERL_LIBS, когда вы будете запускать сгенерированный escript, чтобы загрузчик кода мог найти приложение:elixirи его дочерние приложения (если они используются). :shebang— директива интерпретатора shebang, используемая для выполнения escript. По умолчанию —"#! /usr/bin/env escript\n".:comment— строка комментария, которая следует за директивой shebang в escript. По умолчанию —"".:emu_args— аргументы эмулятора для встраивания в файл escript. По умолчанию —"".
Существует одна опция на уровне проекта, которая влияет на то, как генерируется escript:
-
language: :elixir | :erlang— установите значение:erlangдля проектов Erlang, управляемых Mix. Это обеспечит, что Elixir по умолчанию не будет встроен. Ваше приложение всё равно будет запущено во время загрузки escript с использованием конфигурации, используемой во время сборки.
Пример
defmodule MyApp.MixProject do
use Mix.Project
def project do
[
app: :my_app,
version: "0.0.1",
escript: escript()
]
end
def escript do
[main_module: MyApp.CLI]
end
end
defmodule MyApp.CLI do
def main(_args) do
IO.puts("Hello from MyApp!")
end
end
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.11.2/Mix.Tasks.Escript.Build.html