Elixir 1.7

Mix




elixir

Mix

मिक्स एक बिल्ड टूल है, जो अमृत परियोजनाओं को बनाने, संकलित करने और उनकी निर्भरता को प्रबंधित करने, और अधिक का परीक्षण करने के लिए कार्य प्रदान करता है।

Mix.Project

मिक्स की नींव एक परियोजना है। एक प्रोजेक्ट को एक मॉड्यूल में Mix.Project का उपयोग करके परिभाषित किया जा सकता है, जिसे आमतौर पर mix.exs नामक एक फ़ाइल में रखा mix.exs :

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0"
    ]
  end
end

मिक्स परियोजनाओं पर विस्तृत प्रलेखन के लिए Mix.Project मॉड्यूल देखें।

एक बार परियोजना परिभाषित हो जाने के बाद, कई डिफ़ॉल्ट मिक्स कार्य सीधे कमांड लाइन से चलाए जा सकते हैं:

  • mix compile - वर्तमान परियोजना को संकलित करता है
  • mix test - दिए गए प्रोजेक्ट के लिए परीक्षण चलाता है
  • mix run - प्रोजेक्ट के अंदर एक विशेष कमांड चलाता है

प्रत्येक कार्य के अपने विकल्प होते हैं और कभी-कभी project/0 फ़ंक्शन में परिभाषित करने के लिए विशिष्ट कॉन्फ़िगरेशन होता है। आप सभी उपलब्ध कार्यों को सूचीबद्ध करने के लिए mix help का उपयोग कर सकते हैं और किसी विशेष कार्य के लिए मदद दिखाने के लिए mix help NAME की सहायता कर सकते हैं।

अपनी पहली परियोजना के साथ आरंभ करने का सबसे अच्छा तरीका है कमांड लाइन से mix new my_project को कॉल करना।

Mix.Task

कार्य वे हैं जो मिक्स को एक्स्टेंसिबल बनाते हैं।

परियोजनाएं अपने स्वयं के कार्यों को जोड़कर मिक्स व्यवहार का विस्तार कर सकती हैं। उदाहरण के लिए, अपनी परियोजना के अंदर नीचे दिए गए कार्य को जोड़ने से यह सभी को उपलब्ध होगा जो आपकी परियोजना का उपयोग करता है:

defmodule Mix.Tasks.Hello do
  use Mix.Task

  def run(_) do
    Mix.shell.info "hello"
  end
end

अब mix hello साथ कार्य को लागू किया जा सकता है।

निर्भरता

मिक्स भी आपकी निर्भरता का प्रबंधन करता है और हेक्स पैकेज मैनेजर के साथ अच्छी तरह से एकीकृत करता है।

निर्भरता का उपयोग करने के लिए, आपको अपने प्रोजेक्ट कॉन्फ़िगरेशन में a :deps कुंजी जोड़ने की आवश्यकता है। हम अक्सर अपने कार्य में निर्भरता की सूची निकालते हैं:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0",
      deps: deps()
    ]
  end

  defp deps do
    [
      {:ecto, "~> 2.0"},
      {:plug, github: "elixir-lang/plug"}
    ]
  end
end

आप मिक्स में निर्भरता के बारे में अधिक जानने के लिए mix help deps चला सकते हैं।

वातावरण

मिक्स विभिन्न वातावरणों का समर्थन करता है। वातावरण डेवलपर्स को विशेष रूप से विभिन्न परिदृश्यों के लिए अपनी परियोजना तैयार करने और व्यवस्थित करने की अनुमति देता है। डिफ़ॉल्ट रूप से, मिक्स तीन वातावरण प्रदान करता है:

  • :dev - डिफ़ॉल्ट वातावरण
  • :test - पर्यावरण mix test पर चलता है
  • :prod - पर्यावरण जिस पर आपकी निर्भरताएं चलती हैं

उदाहरण के लिए, MIX_ENV पर्यावरण चर सेट करके कमांड लाइन के माध्यम से पर्यावरण को बदला जा सकता है:

$ MIX_ENV=prod mix run server.exs

उपनाम

उपनाम वर्तमान परियोजना के लिए शॉर्टकट या कार्य हैं।

Mix.Task अनुभाग में, हमने एक कार्य को परिभाषित किया है जो हमारी परियोजना का उपयोग निर्भरता के रूप में सभी के लिए उपलब्ध होगा। क्या होगा यदि हम चाहते थे कि कार्य केवल हमारी परियोजना के लिए उपलब्ध हो? बस एक उपनाम परिभाषित करें:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0",
      aliases: aliases()
    ]
  end

  defp aliases do
    [
      c: "compile",
      hello: &hello/1
    ]
  end

  defp hello(_) do
    Mix.shell.info "Hello world"
  end
end

ऊपर दिए गए उदाहरण में, हमने दो उपनामों को परिभाषित किया है। एक mix c जो mix compile शॉर्टकट है। दूसरे का नाम mix hello , जो mix hello Mix.Tasks.Hello के बराबर है। Mix.Tasks.Hello हमने Mix.Task सेक्शन में परिभाषित किया है।

उपनाम भी सूचियाँ हो सकती हैं, जो कई कार्यों को लगातार चलाने के लिए निर्दिष्ट करती हैं:

[all: [&hello/1, "deps.get --only #{Mix.env}", "compile"]]

ऊपर दिए गए उदाहरण में, हमने mix all नाम के mix all उर्फ परिभाषित किया है, जो हैलो को प्रिंट करता है, फिर वर्तमान परिवेश के लिए निर्भरता को प्राप्त करता है और परियोजना को संकलित करता है।

उपनाम में दिए गए तर्क को सूची में अंतिम कार्य के तर्कों के साथ जोड़ा जाएगा, यदि अंतिम कार्य एक फ़ंक्शन है, तो उन्हें फ़ंक्शन के स्ट्रिंग की सूची के रूप में दिया जाएगा।

अंत में, उपनामों का उपयोग मौजूदा कार्यों को बढ़ाने के लिए भी किया जा सकता है। मान लीजिए कि आप एक और डायरेक्टरी को क्लीन करने के लिए mix clean को बढ़ाना चाहते हैं, जिसके बारे में मिक्स को पता नहीं है:

[clean: ["clean", &clean_extra/1]]

जहाँ &clean_extra/1 आपके mix.exs में एक समारोह होगा। अतिरिक्त सफाई तर्क के साथ।

वर्तमान परियोजना में परिभाषित उपनाम इसकी निर्भरता को प्रभावित नहीं करते हैं और निर्भरता में परिभाषित उपनाम वर्तमान परियोजना से सुलभ नहीं हैं।

उदाहरण के लिए एलिक्सिर स्क्रिप्ट और बैश कमांड चलाने के लिए उपनामों का बहुत शक्तिशाली रूप से उपयोग किया जा सकता है:

# priv/hello.exs
IO.puts("hello")

# priv/world.sh
#!/bin/sh
echo "world!"

# mix.exs
defp create_aliases do
  [
    "taskalias": ["hex.info", "run priv/hello.exs", "cmd priv/world.sh"],
    "taskalias2": ["run priv/hello1.exs", "run priv/hello2.exs"]
  ]
end

ऊपर के उदाहरण में हमने 2 उपनाम बनाए हैं, पहला उदाहरण taskalias टास्क hex.info , फिर ( run ) [ Mix.Tasks.Run ] एक Mix.Tasks.Run स्क्रिप्ट को चलाने के लिए, फिर ( cmd ) [ Mix.Tasks.Cmd ] कमांड लाइन बैश स्क्रिप्ट चलाएँ। इससे पता चलता है कि मिक्स कार्यों के साथ मिश्रित शक्तिशाली शक्तिशाली उपनाम कैसे हो सकता है।

taskalias2 उन कार्यों की एक सीमा दिखाता है जहां दिए गए कार्यों में से केवल एक ही चलेगा, run priv/hello2.exs का निष्पादन नहीं चलेगा। run कमांड, हालांकि, कई फ़ाइलों को स्वीकार कर सकता है, इसलिए कई फ़ाइलों को चलाने के मामले में, इसे फिर से लिखा जा सकता है:

"taskalias2": ["run -r priv/hello1.exs -r priv/hello2.exs"]

पर्यावरण चर

मिक्स के व्यवहार को संशोधित करने के लिए कई पर्यावरण चर का उपयोग किया जा सकता है।

मिक्स निम्नलिखित चर के जवाब:

  • MIX_ARCHIVES - उस निर्देशिका को निर्दिष्ट करता है जिसमें अभिलेख स्थापित किए जाने चाहिए
  • MIX_BUILD_PATH - प्रोजेक्ट build_path कॉन्फ़िगरेशन सेट करता है
  • MIX_DEBUG - इसे चलाने से पहले प्रत्येक कार्य के बारे में डिबग जानकारी आउटपुट करता है
  • MIX_ENV - निर्दिष्ट करता है कि किस पर्यावरण का उपयोग किया जाना चाहिए। Environments देखें
  • MIX_EXS - पूर्ण पथ को mix.exs फ़ाइल में mix.exs है
  • MIX_HOME - मिक्स द्वारा उपयोग की जाने वाली मिक्स होम डायरेक्टरी, MIX_HOME फाइल और स्क्रिप्ट्स का पथ
  • MIX_PATH - अतिरिक्त कोड पथ जोड़ता है
  • MIX_QUIET - टर्मिनल पर सूचना संदेश नहीं छापता है
  • MIX_REBAR - एक मिक्स इंस्टॉल को ओवरराइड करने वाली कमांड को MIX_REBAR करने का रास्ता
  • MIX_REBAR3 - एक मिक्स इंस्टॉल को ओवरराइड करने वाली कमांड को rebar3 करने का रास्ता

पर्यावरण चर जो एक मान रखने के लिए नहीं हैं (और मूल रूप से झंडे के रूप में कार्य करते हैं) को उदाहरण के लिए 1 या true सेट किया जाना चाहिए:

$ MIX_DEBUG=1 mix compile

सारांश

कार्य

compilers()

मिक्स द्वारा उपयोग किए गए डिफ़ॉल्ट कंपाइलर को वापस करता है

debug(debug)

मिक्स डीबग मोड सेट करता है

debug?()

यदि मिक्स डीबग मोड में है, तो यह true है

env()

मिक्स वातावरण देता है

env(env)

वर्तमान मिश्रण वातावरण को env बदलता है

raise(message)

मिक्स त्रुटि उठाता है जो अच्छी तरह से स्वरूपित है

shell()

वर्तमान शेल लौटाता है

shell(shell)

वर्तमान शेल सेट करता है

कार्य

compilers ()

मिक्स द्वारा उपयोग किए गए डिफ़ॉल्ट कंपाइलर को लौटाता है।

इसका इस्तेमाल आपके mix.exs में किया जा सकता है या मिक्स करने के लिए नए mix.exs को जोड़ सकता है:

def project do
  [compilers: Mix.compilers ++ [:foo, :bar]]
end

डिबग (डीबग)

मिक्स डीबग मोड सेट करता है।

डिबग? ()

यदि मिक्स डीबग मोड में है, तो यह true है।

env ()

मिक्स वातावरण देता है।

इस फ़ंक्शन का उपयोग एप्लिकेशन कोड में रनटाइम पर नहीं किया जाना चाहिए (जैसा कि बुनियादी ढांचे के विपरीत और मिक्स कार्यों जैसे कोड का निर्माण करना है)। मिक्स एक बिल्ड टूल है और कोड संकलित होने के बाद उपलब्ध नहीं हो सकता है (उदाहरण के लिए रिलीज़ में)।

पर्यावरण के आधार पर कार्यक्रम के व्यवहार को अलग करने के लिए, Application.get_env/3 माध्यम से एप्लिकेशन वातावरण का उपयोग करने की सिफारिश की जाती है। उचित कॉन्फ़िगरेशन को Mix.Config फ़ाइलों में सेट किया जा सकता है, अक्सर प्रति-पर्यावरण (अधिक जानकारी के लिए Mix.Config.import_config/1 देखें)।

env (env)

वर्तमान मिश्रण वातावरण को env बदलता है।

इस फ़ंक्शन को लागू करते समय सावधान रहें क्योंकि किसी भी प्रोजेक्ट कॉन्फ़िगरेशन को पुनः लोड नहीं किया जाएगा।

इस फ़ंक्शन का उपयोग एप्लिकेशन कोड में रनटाइम पर नहीं किया जाना चाहिए (अधिक जानकारी के लिए env() देखें)।

बढ़ा (संदेश)

raise(binary()) :: no_return()

मिक्स त्रुटि उठाता है जो अच्छी तरह से स्वरूपित है।

खोल ()

वर्तमान शेल लौटाता है।

shell() का उपयोग वर्तमान शेल के लिए आवरण के रूप में किया जा सकता है। इसमें उपयोगकर्ता से जानकारी का अनुरोध करने, शेल पर प्रिंट करने और उसके बाद के लिए उपयुक्तताएं हैं। मिक्स शेल स्वैपेबल है ( shell(shell) देखें), डेवलपर्स को एक परीक्षण शेल का उपयोग करने की अनुमति देता है जो केवल IO प्रदर्शन करने के बजाय वर्तमान प्रक्रिया को संदेश भेजता है (देखें Mix.Shell.Process )।

डिफ़ॉल्ट रूप से, यह Mix.Shell.IO लौटाता है।

खोल (शेल)

वर्तमान शेल सेट करता है।

इस फ़ंक्शन को कॉल करने के बाद, shell बन जाता है जो shell() द्वारा वापस किया shell()