2015-09-12 19 views
18

Jak automatycznie przekompilować i ponownie wczytać aplikację iex + mix za każdym razem, gdy modyfikuję kod źródłowy?Wykonaj ponowną kompilację eliksiru i ponownie załaduj kod źródłowy

Jeśli nie ma sposobu na kombinację iex + mix, aby to zrobić, jaka jest najłatwiejsza alternatywa? Sprawdziłem sposób, w jaki feniks jest doładowywany, i nie wydaje się łatwy do wdrożenia dla mojego małego projektu testowego.

wiem też o Jose .iex.exs:

defmodule R do 
    def reload! do 
    Mix.Task.reenable "compile.elixir" 
    Application.stop(Mix.Project.config[:app]) 
    Mix.Task.run "compile.elixir" 
    Application.start(Mix.Project.config[:app], :permanent) 
    end 
end 

I nie jestem bardzo zadowolony, ponieważ nie jest przeładunek automatycznie na zmiany kodu, nadal muszę wpisywać R.reload! na IEX.

I .. proszę mi pomóc stworzyć „iex” tag na StackOverflow, moja reputacja nie jest wystarczające :)

+0

Myślę, że mieliśmy kilka dyskusji na temat listy mailingowej eliksir-lang-talk na ten temat. Wydaje mi się, że wyszło z tego nawet kilka projektów open source ... czy może było to dla mix test.watch? –

+0

ahh ... tak, kilka projektów na Githubie, przetestuję i wrócę, czy działają, czy nie. – ardhitama

Odpowiedz

3

najbliższą rzeczą wiem jest Alchemist dla emacs przez @tonini. W Alchemist, nie ma opcji, aby umożliwić

(setq alchemist-hooks-test-on-save t) 

co czyni go skompilować i przeprowadza testy podczas zapisywania.

https://github.com/tonini/alchemist.el#testing

1

Dla Erlang, używałem „relx -d” wraz z https://github.com/rustyio/sync z „-d” oznacza, że ​​pliki źródłowe są powiązane za pomocą dowiązań symbolicznych.

To samo działa ładnie w eliksiru. W mix.exs dodałem: synchronizację w dwóch miejscach

defp deps do 
     [{:sync, git: "https://github.com/rustyio/sync.git", tag: "master"}, .... 


    def application do 
    [applications: [:logger, :sync], 

Następnie, następujące polecenie kompiluje go do uwolnienia (zanim to działa, trzeba będzie zainstalować Hex exrm).

Teraz, po zmianie pliku .ex i zapisaniu, zostanie on ponownie skompilowany i załadowany bezpośrednio.

19:33:46.474 [info] ... /apps/testapp1/lib/kv/bucket.ex:0: Recompiled. 

Potrzebujesz tylko synchronizacji w swoim środowisku programistycznym!

+1

Nie sądzę, że to może działać poprawnie z powodu: https://github.com/rustyio/sync/issues/56 –

+1

@ Michael Terry tak, ten sam problem tutaj. – Doodloo

+0

To nie działa konsekwentnie dla eliksiru. Infinite loop mania. – CallMeNorm