Do you want to pick up from where you left of?
Take me there

Исполняемые файлы

Для сборки исполняемых файлов в Elixir мы будем использовать escript. Escript создаёт исполняемый файл, который может быть запущен на любой системе с предустановленным Erlang.

Начало работы

Для создания исполняемого файла с помощью escript нужно сделать совсем немного: имплементировать метод main/1 и обновить наш Mixfile.

Начнём с создания модуля, используемого в качестве точки входа в наш исполняемый файл. Именно здесь мы и создадим main/1:

defmodule ExampleApp.CLI do
  def main(args \\ []) do
    # Делаем что-нибудь
  end
end

Далее нам надо обновить наш Mixfile — включить :escript для нашего проекта, а также указать :main_module:

defmodule ExampleApp.Mixproject do
  def project do
    [app: :example_app, version: "0.0.1", escript: escript()]
  end

  defp escript do
    [main_module: ExampleApp.CLI]
  end
end

Разбор аргументов

Наше приложение настроено, и теперь мы можем заняться разбором аргументов из командной строки. Для этого воспользуемся OptionParser.parse/2 Elixir’а с опцией :switches и укажем, что наш флаг логического типа:

defmodule ExampleApp.CLI do
  def main(args \\ []) do
    args
    |> parse_args
    |> response
    |> IO.puts()
  end

  defp parse_args(args) do
    {opts, word, _} =
      args
      |> OptionParser.parse(switches: [upcase: :boolean])

    {opts, List.to_string(word)}
  end

  defp response({opts, word}) do
    if opts[:upcase], do: String.upcase(word), else: word
  end
end

Сборка

Как только мы закончили настройку нашего приложения для использования escript, до сборки исполняемого файла остался всего один шаг с Mix:

mix escript.build

Давайте попробуем:

$ ./example_app --upcase Hello
HELLO

$ ./example_app Hi
Hi

Вот и всё. Мы только что сделали наш первый исполняемый файл на Elixir, используя escript.

Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!