vrod
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?
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming











Showing Posts 1 to 5- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
LostKobrakai
Dependencies always run in
:prodenv and:ex_docis documented to be included asonly: :dev(or custom equivalent). This should resolve the problem of ex_doc mismatches. Though it seems:unicode_setdoesn’t exclude:ex_docfrom:prodat the moment.axelson
And a PR has already been made and merged to fix that: Sets ex_doc and benchee to optional: true; bumps vers by fireproofsocks · Pull Request #3 · elixir-unicode/unicode_set · GitHub
Now you can either depend on the unicode_set master branch
{:unicode_set, github: "elixir-unicode/unicode_set", branch: "master"}or wait for the next release.Another fix would be to use
override: trueon ex_doc. I’m actually surprised that the error message doesn’t recommend that, unless it doesn’t allow overriding “only”.kip
Thanks to @fireproofsocks and @vrod for the issue and PRs. I have merged and published:
Please reopen an issue if you spot anything else.
josevalim
Quick question: why does it depend on ExDoc for prod? Shouldn’t it be a dev only dep?
Edit: it is dev only now.
then there is no need to be optional!
vrod
Thank you for the explanations and the quick fixes!