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

Mix

Για να μπορέσουμε να μπούμε στα βαθιά νερά της Elixir πρέπει πρώτα να μάθουμε για το Mix. Αν είστε εξοικειωμένοι με την Ruby, το Mix είναι σαν το Bundler, το RubyGems και το Rake συνδυασμένα. Είναι ζωτικό μέρος κάθε Elixir project και σε αυτό το μάθημα θα εξερευνήσουμε μόλις λίγα από τα εξαιρετικά χαρακτηριστικά του. Για να δείτε όλα όσα έχει να προσφέρει το Mix τρέξτε την εντολή mix help.

Μέχρι τώρα δουλεύαμε αποκλειστικά μέσα στο iex το οποίο όμως έχει περιορισμούς Για να μπορέσουμε να χτίσουμε κάτι ουσιώδες θα πρέπει να χωρίσουμε τον κώδικά μας σε πολλά αρχεία για να τα διαχεριστούμε αποτελεσματικά. Το mix μας επιτρέπει να το κάνουμε αυτό στα projects.

Νέα Projects

Όταν είμαστε έτοιμοι να δημιουργήσουμε ένα νέο project στην Elixir, το Mix μας το κάνει εύκολο με την εντολή mix new. Αυτή θα δημιουργήσει την δομή φακέλων του project και τα αναγκαία στερεότυπα κώδικα για να λειτουργήσει. Είναι αρκετά εύκολο, ας το δούμε:

mix new example

Από την έξοδο μπορούμε να δούμε ότι η Mix δημιούργησε τους φακέλους και έναν αριθμό στερεότυπων αρχείων:

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

Σε αυτό το μάθημα θα εστιάσουμε την προσοχή μας στο mix.exs. Εδώ ρυθμίζουμε την εφαρμογή, τις εξαρτήσεις, το περιβάλλον και την έκδοση. Ανοίξτε το αρχείο στον αγαπημένο σας επεξεργαστή κειμένου, θα πρέπει να βλέπετε κάτι σαν και αυτό (τα σχόλια έχουν αφαιρεθεί για συντομία):

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

Ο πρώτος τομέας που θα κοιτάξουμε είναι το project. Εδώ ορίζουμε το όνομα της εφαρμογής μας (app), καθορίζουμε την έκδοση (version), την έκδοση της Elixir (elixir) και τέλος τις εξαρτήσεις (deps).

Ο τομέας application χρησιμοποιείται κατά την δημιουργία του αρχείου εφαρμογής το οποίο θα καλύψουμε στη συνέχεια.

Διάδραση

Μπορεί να προκύψει η ανάγκη για χρήση της iex μέσα στο πλαίσιο της εφαρμογής μας. Ευτυχώς για εμάς, το mix το κάνει εύκολο. Μπορούμε να ξεκινήσουμε μια νέα συνεδρία iex:

cd example
iex -S mix

Ξεκινώντας την iex με αυτό τον τρόπο θα φορτώσετε την εφαρμογή και τις εξαρτήσεις της στην τρέχουσα εκτέλεση.

Σύνταξη

Το mix είναι έξυπνο και θα συντάξει τις αλλαγές σας όταν απαιτείται, αλλά μπορεί να είναι απαραίτητο να συντάξετε ρητώς το project σας. Σε αυτό τον τομέα θα καλύψουμε πως να συντάξουμε το project και τι κάνει η σύνταξη.

Για να συντάξουμε ένα project mix χρειαζόμαστε μόνο να τρέξουμε την εντολή mix compile στο βασικό μας φάκελο: Σημείωση: οι εργασίες Mix για ένα project είναι διαθέσιμες μόνο από το γονικό φάκελο του project, μόνο καθολικές Mix εργασίες είναι διαθέσιμες διαφορετικά

mix compile

Δεν υπάρχουν πολλά στο project μας, έτσι η έξοδος δεν είναι τόσο συναρπαστική αλλά θα πρέπει να ολοκληρωθεί επιτυχώς:

Compiled lib/example.ex
Generated example app

Όταν συντάσσουμε ένα project, το mix δημιουργεί έναν φάκελο _build για τα αντικείμενά μας. Αν δούμε μέσα στο φάκελο _build θα δούμε την συνταγμένη εφαρμογή μας: example.app.

Διαχείριση Εξαρτήσεων

Το project μας δεν έχει εξαρτήσεις αλλά θα έχει σύντομα, έτσι ας δούμε τον ορισμό εξαρτήσεων και το κατέβασμά τους.

Για να προσθέσουμε μια νέα εξάρτηση χρειάζεται να την προσθέσουμε πρώτα στο αρχείο mix.exs και στον τομέα deps. Η λίστα των εξαρτήσεων μας συντάσσεται από τούπλες με 2 απαιτούμενες τιμές και μια προαιρετική: Το όνομα πακέτου σαν άτομο, το αλφαριθμητικό έκδοσης και προαιρετικά τις επιλογές.

Για αυτό το παράδειγμα ας δούμε ένα project με απαιτήσεις, όπως το 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

Όπως πιθανότατα καταλάβατε από τις εξαρτήσεις παραπάνω, η εξάρτηση cowboy είναι μόνο απαραίτητη κατά την ανάπτυξη και τη δοκιμή.

Όταν έχουμε καθορίσει τις εξαρτήσεις μας, υπάρχει ένα τελικό βήμα, να τις κατεβάσουμε. Αυτό είναι ανάλογο της bundle install:

mix deps.get

Αυτό ήταν! Ορίσαμε και κατεβάσαμε τις εξαρτήσεις του project μας. Τώρα είμαστε έτοιμοι να προσθέσουμε εξαρτήσεις όταν έρθει η ώρα.

Περιβάλλοντα

Το mix, όπως και το Bundler, υποστηρίζουν διαφορετικά περιβάλλοντα. Το mix χωρίς να το αλλάξουμε δουλεύει με τρία περιβάλλοντα:

Στο τρέχον περιβάλλον μπορούμε να έχουμε πρόσβαση χρησιμοποιώντας την Mix.env. Όπως αναμενόταν, το περιβάλλον μπορεί να αλλαχθεί με την μεταβλητή περιβάλλοντος MIX_ENV:

MIX_ENV=prod mix compile
Έπιασες λάθος ή θέλεις να συνεισφέρεις στο μάθημα; Επεξεργαστείτε αυτό το μάθημα στο GitHub!