2017-05-31 14 views
1

在我涉及Elixir的項目中,我經常有些東西想添加到我的mix.exs文件中,例如添加我自己的ENV等等。添加這些項目通常很痛苦,並且必須將它們添加到我的.gitignore。我的問題是,是否有可能有類似custom_mix.exs,我可以從mix撥打電話,我可以放入所有自定義設置,這些設置將覆蓋在mix.exs中定義的設置? custom_mix.exs文件不會被置於git下,並且可以永久置於.gitignore之下,如果沒有找到custom_mix.exs,則mix.exs不會出錯。是否有可能爲Elixir定製混合文件?

回答

1

是的,很容易做到。以下添加到您的mix.exs的最頂端文件

if File.exists?("./custom_mix.exs"), do: Code.require_file("./custom_mix.exs", __DIR__) 

defmodule MyApp.Mixfile do 
    # ... 
    if function_exported?(CustomMix, :some_stuff, 0), 
    do: CustomMix.some_stuff() 
end 

然後創建custom_mix.exs文件是這樣的:

defmodule CustomMix do 
    def some_stuff do 
    # 
    end 
end 
+0

如果找不到'custom_mix.exs',這會不會導致'mix'炸出來? –

+0

更新了我的答案 –

4

雖然由史蒂夫Pallen答案是完全正確的,你正在做的它首先是錯誤的。這絕對看起來像一個X/Y problem

爲什麼要把設置爲mix.exs文件中,而你有config/config.exs這個特殊用途? config.exs內置支持您開箱即用的內容,查看如何爲不同的環境做了不同的配置。

mix.exs文件旨在指定一般應用程序行爲,您目前試圖實現的目標是使應用程序行爲未確定


可能出現的問題,你可以嘗試解決這種方式,我能想到的,是依賴於應用程序的版本或做外部mix.exs代碼修修補補。儘管如此,解決和對抗核心靈丹妙藥項目文件的方法是一個壞主意。你可以爲原始的mix.exs文件創建一個包裝器,從你的版本中調用它的函數,並迫使Elixir使用你的版本和一些shell包裝器或類似的東西。

+0

是否有可能實現一個獨立的需求集合,比如項目的依賴項,但我只想讓他們爲我自己的配置聲明':lowks' - >'{:bypass,「〜> 0.6」,只:[:lowks,:test,:wercker]}'? –

+0

一切皆有可能。現在我確信這是一個X/Y問題。如果依賴關係是_a dependency_,那麼不能爲用戶拋出它。如果是你的,私人的等等,那麼是的('only:'選項是指定_environments_)。歡迎你,執行上述操作並運行'MIX_ENV = lowks iex -S mix'。 – mudasobwa

+0

同意@mudasobwa我還是不明白你爲什麼要這樣做。我在mix.exs中做過的唯一事情是,如果在處理依賴關係時切換本地路徑和十六進制/ github之間的依賴關係。然後,我只是在發佈兩條deps行時發表評論,並刪除本地路徑版本。 –

相關問題