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

Mix

Než sa ponoríme do Elixiru hlbšie, musíme sa naučiť pracovať s nástrojom Mix. Ak poznáte Ruby, Mix vám bude pripomínať kombináciu nástrojov Bundler, RubyGems a Rake. Je kľúčovou súčasťou každého elixirového projektu a v tejto lekcii si ukážeme len niekoľko z jeho skvelých funkcií. Zoznam všetkého, čo vie Mix ponúknuť zobrazíme príkazom mix help.

Doteraz sme pracovali výhradne iba s iex, čo však má svoje limity. Pri skutočnom projekte potrebujeme kód rozdeliť do samostatných súborov aby sme ho mohli efektívne spravovať. Mix nám s tým pomôže

Nový projekt

Keď sme pripravený vytvoriť nový Elixir projekt, Mix nám to uľahčí príkazom mix new. Ten nám vygeneruje štruktúru adresárov projektu a všetky základné súbory:

mix new example

Z výstupu príkazu vidíme, že boli vytvorené všetky štandardné adresáre a súbory:

* creating README.md
* creating .gitignore
* creating .formatter.exs
* creating mix.exs
* creating lib
* creating lib/example.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs

V tejto lekcii sa zameriame hlavne na súbor mix.exs. V ňom sa nachádza konfigurácia nášho projektu, jeho závislostí, verzií a prostredí pre beh. Po otvorení súboru v editore uvidíme niečo takéto (komentáre v kóde vynechávame v záujme stručnosti):

defmodule Example.Mix do
  use Mix.Project

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

  def application do
    [
      extra_applications: [:logger]
    ]
  end

  defp deps do
    []
  end
end

V sekcii project definujeme meno projektu (app), špecifikujeme jeho verziu (version), použitú verziu jazyka Elixir (elixir) a nakoniec závislosti (deps).

Sekcia application slúži na špecifikovanie aplikácii (menších častí projektu, napríklad webserver, logger, databázový pool a podobne), ktoré náš projekt spúšťa a sú potrebné pre jeho beh.

Interaktívny režim

Možno budeme musieť použiť iex v kontexte našej aplikácie. Našťastie pre nás, Mix nám to uľahčí. Môžeme spustiť novú inštanciu iex spolu s Mix takto:

cd example
iex -S mix

Keď spustíme iex týmto spôsobom, tak zároveň načíta našu aplikáciu a aj všetky jej závislosti.

Kompilácia

Mix je natoľko inteligentný, že dokáže sám zistiť, že sme niečo zmenili a treba to prekompilovať, no občas sa stane, že potrebujeme ručne skompilovať celý projekt. V tejto sekcii sa pozrieme ako skompilovať náš projekt a čo kompilácia vykoná.

Pre kompiláciu stačí v kmeňovom adresári projektu spustiť príkaz mix compile:

mix compile

V našom projekte zatiaľ skoro nič nie je, takže kompilácia by mala prebehnúť rýchlo a bez problémov:

Compiled lib/example.ex
Generated example app

Pri prvej kompilácii vytvorí mix v projekte adresár _build, do ktorého uloží všetok skompilovaný kód. Keď sa do tohto adresára pozrieme, zbadáme našu skompilovanú aplikáciu: example.app.

Správa závislostí

Náš projekt nemá žiadne závislosti ale to zmeníme zachvíľu, tak teraz si prezrieme ako definujeme a sťahujeme závislosti.

Ako prvé musíme novú závislosť pridať do mix.exs v sekcii deps. Zoznam balíčkov je zložený z tuples, ktoré majú dve požadované hodnoty a jednú voliteľnú hodnotu: meno balíčka v tvare atómu, reťazec verzie a voliteľné pomocné parametre.

Pozrime sa na ukážku z nejakého projektu so závislosťami, napríklad phoenix_slim:

def deps do
  [
    {:phoenix, "~> 1.1 or ~> 1.2"},
    {:phoenix_html, "~> 2.3"},
    {:cowboy, "~> 1.0", only: [:dev, :test]},
    {:slime, "~> 0.14"}
  ]
end

Ako ste si zrejme domysleli, balíček cowboy je nutný len pri vývoji a testovaní.

Po pridaní závislostí nám zostáva už len povedať Mixu, aby ich stiahol (v Ruby tomu zodpovedá príkaz bundle install):

mix deps.get

To je všetko! Definovali a stiahli sme závislosti nášho projektu. Teraz sme pripravení pridať závislosti keď budeme potrebovať.

Prostredia

Mix, rovnako, ako Bundler, podporuje rôzne behové prostredia. Tri základné prostredia, s ktorými projekt ráta hneď po svojom vygenerovaní, sú:

V kóde zistíme aktívne prostredie použitím Mix.env. Behové prostredie môžeme nastaviť pomocou premennej operačného systému MIX_ENV, napríklad:

MIX_ENV=prod mix compile
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!