Spec-Zone.ru › Elixir 1.12

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

Spec-Zone.ru

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