Spec-Zone.ru › Elixir 1.11

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, вам нужно будет добавить пути к каталогам ebin Elixir в переменную окружения 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

Spec-Zone.ru

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