phf
Prevent Mix from fetching dependencies
Hi!
The objective is to prevent Mix from fetching dependencies and to rely solely on ERL_LIBS. The idea is that all dependencies are already available through ERL_LIBS, which have been added by Guix.
However, the issue arises when using mix compile. It attempts to fetch dependencies regardless of existing settings. Currently, no option prevents this behavior; it always tries and subsequently fails. A potential workaround is to patch mix.exs so that the project() function returns a key/value list with the deps key set to [].
For instance, in the Mix project named makeup, there isn’t a straightforward method to instruct mix to avoid fetching nimble_parsec, even when it’s already available in ERL_LIBS:
┌────
│ $ mix compile --no-deps-check
│ Could not find Hex, which is needed to build dependency :nimble_parsec
│ Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] n
│ ** (Mix) Could not find an SCM for dependency :nimble_parsec from Makeup.Mixfile
└────
It’s evident from the IEx session below that nimble_parsec is
available:
┌────
│ $ iex
│ Interactive Elixir (1.14.0) - press Ctrl+C to exit (type h() ENTER for help)
│ iex(1)> :code.which(NimbleParsec)
│ '/gnu/store/261qi8bmagns11d3ssiypbqj82i9k16g-profile/lib/elixir/1.14/nimble_parsec/ebin/Elixir.NimbleParsec.beam'
└────
So, the pressing question is: how can we configure mix to prioritize ERL_LIBS over fetching new dependencies?
Marked As Solved
phf
If nimble_parsec package is built locally:
/tmp/guix-build-elixir-nimble-parsec-1.3.1.drv-4$ tree -L 5
.
├── _build
│ └── prod
│ └── lib
│ └── nimble_parsec
│ ├── consolidated
│ └── ebin
├── CHANGELOG.md
├── CHECKSUM
├── environment-variables
├── lib
│ ├── mix
│ │ └── tasks
│ │ └── nimble_parsec.compile.ex
│ ├── nimble_parsec
│ │ ├── compiler.ex
│ │ └── recorder.ex
│ └── nimble_parsec.ex
├── metadata.config
├── mix.exs
├── README.md
└── VERSION
and a symlink has been built in the source of the package makeup that depends on nimble_parsec like so:
/tmp/guix-build-elixir-makeup-1.1.0.drv-6$ tree _build/
_build/
└── prod
└── lib
└── nimble_parsec -> /tmp/guix-build-elixir-nimble-parsec-1.3.1.drv-4/_build/prod/lib/nimble_parsec
then mix does not fetch dependencies:
/tmp/guix-build-elixir-makeup-1.1.0.drv-6$ guix shell elixir -- bash -c 'MIX_ENV=prod mix compile --no-deps-check'
Compiling 44 files (.ex)
Generated makeup app
It suffices to generalize that idea for all dependencies of a given package.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








