web-dev-qa-db-ja.com

エリクサーアプリを再コンパイルし、ソースコードの変更時に再読み込みする

ソースコードを変更するたびに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」タグを作成するのを手伝ってください、私の評判は十分ではありません:)

26
ardhitama

現在、iexにはこれを行う内部関数があります:

iexコンソール内で IEx.Helpers.recompile を呼び出します。

8
ardhitama

これはあなたが探しているものだと思います: https://github.com/AgilionApps/remix

16
Dennis

私が知っている最も近いものは、@ toniniによるemacsのAlchemistです。錬金術師には、有効にするオプションがあります

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

保存するとテストをコンパイルして実行します。

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

3
Theo

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.

開発環境でのみ同期が必要です!

1
mattias