michaelterryio

michaelterryio

Make `recompile` work with dependency

Hey,

I’ve got a project with several path dependencies. Some are phoenix apps, but this likely isn’t relevant.

I don’t fully understand the following behavior.

If I make a change in a file in a path dependency and run iex -S mix phx.server, the file is recompiled.

But if I make a change in a file in a path dependency while iex is already running, the file is not recompiled.

I know I can use r() on a particular module, but that’s not quite as convenient. Is there an easy way to get recompile to work on changed files in path dependencies?

Most Liked

axelson

axelson

Scenic Core Team

You could try out exsync for your code reloading:

It will recompile path dependencies for you when you make the changes.

delameko

delameko

As this is a top result on Google when searching for auto recompiling dependencies, I just wanted to leave a solution that doesn’t require a third party library (not sure if this was possible when the question was originally asked). This is for Phoenix apps running live_reload, if not, then exsync is still a good option.

You’ve got two projects my_app and my_dep. In my_app/mix.exs you’ve got:

    defp deps do
      {:my_dep, path: "../my_dep"}
      ..
    end

In your config/dev.exs:

    config :my_app, MyApp.Endpoint,
      live_reload: [
        patterns: [
          # make sure you have patterns that work for either app, they should be relative 
          # to the root of a project, the same pattern can match both apps. 
          # So don't do '~r"../core_dep/priv"', that'll be ignored, do: '~r"priv"'
        ]
      reloadable_apps: [:my_dep, :my_app]

and

    parent_path =
      __ENV__.file
      |> Path.dirname()
      |> Path.join("../..")
      |> Path.expand()

    config :phoenix_live_reload, :dirs, [
      Path.join([parent_path, "my_dep"]),
      Path.join([parent_path, "my_app"])
    ]

Now your webpage update with changes made to either app.

NobbZ

NobbZ

Recompile does only ever recompile modules of the current application/project.

In my opinion, you should not rely on anything to recompile your dependencies, except for mix deps.compile --force.

Where Next?

Popular in Troubleshooting Top

alexlanderzander
Hello everyone, I’m working on a blockchain project in Elixir and I’m implementing some of the core cryptography in a Rust NIF using Rus...
New
chocolatedonut
Besides (over)logging every code-path leading to Repo.insert_all, is it possible to make Postgrex and/or ecto_sql log the exact, failing ...
New
Ferenc
I have installed it on Phoenix 1.8.1 (without authentication or other packages and got 2 problems). I had to set up things manually the ...
New
mooreryan
In a project I’m working on, I cannot get tests with breakpoints or pry working. Here is an example in a new mix project. Create a fresh...
New
arnoldwolfe
I’ve been unable to deploy apps for over a week now due to the following error. It all started when Github has issues with GitHub Actions...
New
jason.o
I don’t get an error directly related to Paraxial, but removing that dependency stopped the crash. Has anyone experienced a similar issu...
New
harmon25
Hi All, I am bumping into a weird issue with an umbrella app while upgrading to latest Elixir 1.19.x + otp28. A couple apps in the umbr...
New
apoorv-2204
The Issue of Enums in Elixir Elixir doesn’t have a native enum construct, so we usually rely on atoms, strings, or macros to represent na...
New
Richardm
Hi, I have the following code, and even though I can see (via the inspect) that the response_body does contain one of the strings I’m lo...
New
runyonave
We have been stuck on this for a few days now and I am really not sure what could be missing. I can get chromic_pdf to work perfectly fin...
New

Other popular topics Top

vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
AstonJ
You’re a programmer, so you don’t need spoon feeding with the conventional drivel about “this is an integer.” No. You need to know what’s...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement