Ответ 1
В настоящее время iex
имеет внутреннюю функцию:
invoke IEx.Helpers.recompile внутри консоли iex
.
Как автоматически перекомпилировать и перезагрузить приложение 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, моей репутации недостаточно:)
В настоящее время iex
имеет внутреннюю функцию:
invoke IEx.Helpers.recompile внутри консоли iex
.
Я думаю, что это то, что вы ищете: https://github.com/AgilionApps/remix
Ближайшая вещь, о которой я знаю, находится в Alchemist для emacs от @tonini. В Alchemist есть возможность включить
(setq alchemist-hooks-test-on-save t)
который позволяет скомпилировать и запускать тесты при сохранении.
Для 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.
Вам нужна только синхронизация в среде разработки!