Сделайте так, чтобы приложение elixir перекомпилировалось и перезагрузилось при изменении исходного кода

Как автоматически перекомпилировать и перезагружать приложение iex + mix каждый раз, когда я изменяю исходный код?

Если комбинация iex + mix не может сделать это, какая самая простая альтернатива? Я проверил, как phoenix выполняет перезагрузку, и это не кажется простым для моего небольшого тестового проекта.

Я также знаю о .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

И я не очень доволен, так как он не перезагружается автоматически при изменении кода, мне все еще нужно набрать R.reload! на iex.

И... пожалуйста, помогите мне создать тег "iex" в stackoverflow, моей репутации недостаточно :)


person ardhitama    schedule 12.09.2015    source источник
comment
Я думаю, у нас было несколько дискуссий по этому поводу в списке рассылки elixir-lang-talk. Я думаю, что даже некоторые проекты с открытым исходным кодом вышли из этого... или это было для микса test.watch?   -  person José Valim    schedule 13.09.2015
comment
ааа ... да, на github есть несколько проектов, я проверю и вернусь, работают они или нет.   -  person ardhitama    schedule 13.09.2015


Ответы (4)


Я думаю, это то, что вы ищете: https://github.com/AgilionApps/remix

person Dennis    schedule 02.02.2016

В настоящее время iex имеет внутреннюю функцию для этого:

вызвать IEx.Helpers.recompile внутри iex консоли.

person ardhitama    schedule 10.04.2017
comment
Вам не нужно вводить полную команду IEx.Helpers.recompile, достаточно просто запустить recompile - person Zoltán; 25.04.2018

Самое близкое, что я знаю, это Алхимик для emacs от @tonini. В Alchemist есть возможность включить

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

что заставляет его компилировать и запускать тесты при сохранении.

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

person Theo    schedule 29.09.2015

Для Erlang я использовал «relx -d» вместе с https://github.com/rustyio/sync "-d" означает, что исходные файлы связаны символическими ссылками.

То же самое прекрасно работает в Эликсире. В mix.exs я добавил :sync в следующих двух местах.

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


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

Затем следующая команда компилирует его в релиз (прежде чем он заработает, вам нужно будет установить hex и exrm).

mix release -dev

Теперь, когда вы изменяете файл .ex и сохраняете его, он будет перекомпилирован и загружен напрямую.

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

Вам нужна синхронизация только в вашей среде разработки!

person mattias    schedule 15.03.2016