Integrating Our OTP Dependencies into Phoenix—Continued

Let’s explore other techniques for using Phoenix external path dependencies, umbrella projects, and contexts.

Using external path dependencies

Suppose we want to work with an external dependency but want the convenience of keeping everything in the same repository. In that case, we can take the same approach we did with persistence and use a poncho-style dependency. Poncho dependencies have an ever-so-slight coupling to their parent projects called an organizational coupling.

Benefits

The benefits of this are development independence with reduced ceremony:

  • We’ll be able to evolve interfaces side by side.

  • Since all of our dependencies are in the same repository, we’ll be able to keep them in sync better.

Drawbacks

There’s also a downside to path dependencies concerning tooling:

  • There’s no automated way to build and test an entire project, dependencies and all.

  • If tooling becomes a burden, we can go with an umbrella dependency.

Creating an umbrella project

Let’s make an umbrella project called umbrella_app using the following command:

mix new umbrella_app --umbrella

Let’s take a look at the mix.exs file:

Using umbrella projects

Like poncho projects, umbrella mix projects integrate dependencies in a single repository. Umbrella projects also have another benefit, in that they let developers work on each project independently and do selected tasks project-wide. For example, by using umbrellas, we can choose to run tests for all projects with a single command or switch into a single project and run only those tests.

Get hands-on with 1400+ tech skills courses.