Modifying Phoenix Generator and Failing to Maintain Old Behavior

@victorbjorklund thanks for your @ThinkingElixir #167 on Phoenix Generators.

This would solve a problem at work where we want all new services to have certain observability libraries installed and to respond to a health check without logging, etc.

I tried your article Build your custom Phoenix phx.new generator | VictorBjorklund.com

I can not get into a state where my modified generator and the original generator both work. I need this because it would be bad if someone goes to make a side-project on their work laptop and ends up with the company’s setup.

Here are the steps I took:

  • Make a copy of the installer dir with my own name.
  • Rename the file and module name for /lib/mix/tasks/phx.new_project.ex
  • Edit /templates/phx_single/mix.exs

Now I can run mix phx.new_dw foo and I get the modified mix.exs. But if I run mix phx.new foo I also get the modified mix.exs.

I tried renaming the app: :phx_new in the installer/mix.exs. This really made it seem like I found the correct thing, because it generated a differently named file in ~/.asdf/installs/elixir/1.15.4-otp-26/.mix/archives/ but still, both commands generate the modified code.

I tried deleting and re-generating the files in ~/.asdf/installs/elixir/1.15.4-otp-26/.mix/archives/, this produced the same result.

Do you have an example of a GitHub project where you have a modified version of the generator that still allows you to call the official Phoenix generator when you want to?

2 Likes

Oh man, if you succeed in this and even open-source it, I am definitely buying you a pizza and a beer!

1 Like

That renames just the archive, but the mix task names are still infered from the module names of those mix tasks.

This rings true. But when I have two different installer directories, one with a mix phx.new and the other with a mix phx.new_dw, both of them ends up applying the changes I made in my new installer_dw directory.

I will at least open source a toy version of this if I got it working. No pizza or beer required.

For personal projects, my only need is that mix_test_watch is included on every Elixir project ever :grinning:

1 Like