ソースコードを変更するたびにiex + mixアプリケーションを自動的に再コンパイルして再ロードする方法
Iex +ミックスの組み合わせでそれを行う方法がない場合、最も簡単な代替策は何ですか?フェニックスのリロード方法を確認しましたが、小規模なテストプロジェクトに実装するのは簡単ではないようです。
ホセの.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
コードの変更時に自動的に再読み込みされないので、私は非常に満足していません。それでも、iexでR.reload!
と入力する必要があります。
そして.. stackoverflowに「iex」タグを作成するのを手伝ってください、私の評判は十分ではありません:)
現在、iex
にはこれを行う内部関数があります:
iex
コンソール内で IEx.Helpers.recompile を呼び出します。
これはあなたが探しているものだと思います: https://github.com/AgilionApps/remix
私が知っている最も近いものは、@ toniniによるemacsのAlchemistです。錬金術師には、有効にするオプションがあります
(setq alchemist-hooks-test-on-save t)
保存するとテストをコンパイルして実行します。
Erlangの場合、「relx -d」を https://github.com/rustyio/sync と一緒に使用していました。「-d」は、ソースファイルがシンボリックリンクを使用してリンクされていることを意味します。
Elixirでも同じことがうまくいきます。 mix.exsでは、次の2つの場所に: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.
開発環境でのみ同期が必要です!