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]
Escript следует использовать для совместного использования скриптов между разработчиками, а не в качестве механизма развертывания. Для запуска активных систем используйте mix run или создание релизов. Дополнительную информацию о жизненных циклах систем см. в модуле Application.
Все конфигурации, определённые в config/config.exs, будут включены в escript. config/runtime.exs также включён для Elixir escripts. После загрузки конфигурации эта задача запускает текущее приложение. Если этого не требуется, установите конфигурацию :app в значение nil.
Эта задача также удаляет документацию и отладочные фрагменты из скомпилированных .beam файлов для уменьшения размера escript. Если этого не требуется, проверьте параметр :strip_beams.
Примечание: escript не поддерживают проекты и зависимости, которым необходимо хранить или считывать артефакты из каталога priv.
Опции командной строки
Ожидаются те же параметры командной строки, что и у mix compile.
Конфигурация
Следующий параметр должен быть указан в вашем файле mix.exs под ключом :escript.
-
:main_module— модуль, который будет вызван после запуска escript. Модуль должен содержать функцию с именемmain/1, которая получит аргументы командной строки. По умолчанию аргументы передаются в виде списка двоичных данных, но если проект настроен сlanguage: :erlang, то это будет список символьных строк.
Остальные параметры могут быть указаны для дальнейшей настройки 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, чтобы загрузчик кода мог найти приложение: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.12.0/Mix.Tasks.Escript.Build.html