Подтвердить что ты не робот

Сделать приложение 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, моей репутации недостаточно:)

4b9b3361

Ответ 1

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

invoke IEx.Helpers.recompile внутри консоли iex.

Ответ 3

Ближайшая вещь, о которой я знаю, находится в Alchemist для emacs от @tonini. В Alchemist есть возможность включить

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

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

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

Ответ 4

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

То же самое хорошо работает в Elixir. В mix.exs я добавил: синхронизация в следующих двух местах

  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.

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