I have a problem that is coming up now and then. One app depends on another, which depends on another. This is all ok because the organization is good – no cyclic dependencies.
However, many times, I find that there is problem with ex_doc
because all packages use this. But if one package includes it in a slightly different way, the app that depends on that package will get an error, something like:
Dependencies have diverged:
* ex_doc (Hex package)
the :only option for dependency ex_doc
> In mix.exs:
{:ex_doc, "~> 0.24.0", [env: :prod, repo: "hexpm", hex: "ex_doc", only: :dev, runtime: false, optional: true]}
does not match the :only option calculated for
> In deps/unicode_set/mix.exs:
{:ex_doc, "~> 0.19", [env: :prod, hex: "ex_doc", repo: "hexpm", optional: false]}
Remove the :only restriction from your dep
** (Mix) Can't continue due to errors on dependencies
I am trying many things to fix this in the dependencies, but it seems that always the parent app has this problem. It’s very frustrating!
I am noticing how packages like ecto
use ex_doc
, and is something like {:ex_doc, "~> 0.20", only: :docs}
(but this does not seem to solve the “Dependencies have diverged” problem).
How should packages include ex_docs
? Pretty much everything on hex.pm
requires this package to make it’s documentation pages, yes?