Zależności w Elixirze, czyli wstęp do Mixa

Jakoś tak w ostatnich latach się porobiło, że każdy szanujący się język programowania powinien się dorobić narzędzia do zarządzania procesem kompilacji, zależnościami, czy wdrożeniem. Dla Javy jest to Ant, Maven i Gradle. Pierwsze dwa reprezentują podejście opisowe, a trzeci to po prostu DSL w groovym. Dla Scali będzie to SBT, dla Rubiego Rake itd, itp. Można jednak zaobserwować, że wszystkie te narzędzia dążą do modelu, w którym zamiast opisu i konfiguracji (w xml-u) mamy wykonywalny skrypt. Jest to rozsądne, ponieważ daje programiście znacznie większe możliwości w zakresie kontroli procesu kompilacja-testy-wdrożenie niż w przypadku narzędzi w rodzaju mavena. Tu po prostu piszesz kawałek kodu i po problemie.

W przypadku Elixira narzędziem tym jest Mix. Dostarczany jest wraz z paczką języka i pracuje w oparciu o plik mix.exs, w którym zdefiniowany jest najzwyczajniejszy w świecie moduł. Musi on zawierać funkcję project zwracającą listę asocjacyjną (oryginalna nazwa tej struktury to keywords) z konfiguracją oraz używać (makro use) Mix.Project. Na przykładzie:

Listing 1. Przykładowy plik mix.exs

defmodule ElixirExample.Mixfile do
  use Mix.Project

  def project do
    [app: :elixir_example,
     version: "0.1.0",
     elixir: "~> 1.3",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps()]
  end

  # Configuration for the OTP application
  #
  # Type "mix help compile.app" for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type "mix help deps" for more examples and options
  defp deps do
    []
  end
end

Listing 1. zawiera plik, który powstaje po wywołaniu polecenia mix new. Jak widać jest w nim kilka dodatkowych rzeczy. Po pierwsze lista zależności została przesunięta do prywatnej funkcji deps. Jest to o tyle wygodne, że w przypadku większych aplikacji, gdzie lista zależności jest długa, kod będzie czytelniejszy. Ciekawostką jest możliwość wykorzystania zarówno repozytorium binarek Hex jak i wskazanie taga w repozytorium z kodem źródłowym (git). Po drugie mamy tu funkcję application, która odpowiada za wygenerowanie pliku .app, który opisuje z jakich zasobów korzysta aplikacja, jaka jest jej struktura i jak powinna zostać uruchomiona. Jest to element pochodzący bezpośrednio z erlanga.

I to są podstawy, które pozwalają nam na rozpoczęcie zabawy z programowaniem w Elixirze trochę bardziej skomplikowanych rzeczy niż proste zabawki z użyciem REPLa iex.

4 myśli na temat “Zależności w Elixirze, czyli wstęp do Mixa

  1. Cześć,
    Jakie IDE/Edytor wykorzystujesz do pracy z Elixirem?

  2. Na chwilę obecną pluginu do IntelliJ Idea. Nie jest on najlepszy, ale ze względu na to, że IntelliJ mam dość dobrze opanowany, to jakoś mnie nie bolą drobne niedociągnięcia w np. podświetlaniu składni czy wyświetlaniu dokumentacji.

  3. Polecam Atom do Elixira. Sprawdzałem różne IDE i Atom sobie radzi najlepiej z podkreślaniem i podpowiadaniem. Obadałem na Windowsie i Linux Mincie.

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax