-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Store compiled dependencies In _build by version #12520
Comments
For
I am not sure what version they should be grouped by though. Maybe the hash of the lock file? |
Good call @ericmj. Perhaps the solution is to have branched builds. Something like this: _build/
dev/
dev-branch/ Every time a new branch is started, it copies from the canonical "_build/dev". However, compile-time config will be an issue. When you change a compile-time config, the dep is not automatically recompiled, so if we copy from _build/dev and there is a new configuration, compilation will fail telling you that you need to explicitly recompile that dependency. Maybe we could detect those but there is additional work. Note we also already have
|
I am working on this part of the issue on a branch. EDIT: This has been merged. |
@josevalim Is that branch public by chance? Or possibly already merged? I couldn't find any obvious branches related to this issue. 😄 |
It is local but not really in a state to be shared yet, sorry. :( |
I just wanted to highlight that adding a version to deps would make NODE_PATH a lot harder when importing js files from dependencies (e.g. in the context of phoenix) |
@teamon that's an excellent point. We could have symlinks, so |
Elixir and Erlang/OTP versions
erlang 25.2
elixir 1.14.3-otp-25
Operating system
MacOS - Ventura 13.1 - Apple M1 Max
Current behavior
As an engineer, when I switch between branches to provide peer review to other engineers, if dependencies changed across branches, I need to re-fetch and re-compile those dependencies. On larger projects this process can take 5-20 minutes, which can lead to slowdowns in pair programming and getting new pull requests tested, especially if I keep switching back to a local branch that I'm working on where dependencies have changed.
Reproduction steps:
main
mix.exs
(either add dependencies, remove dependencies, or upgrade dependencies)mix deps.get
iex -S mix phx.server
to compile dependencies and the projectgit checkout main
on that projectiex -S mix phx.server
and observe an error saying the lockfile doesn't match the compiled dependencies and to runmix deps.get
mix deps.get
iex -S mix phx.server
and observe dependencies are re-compiledExpected behavior
Here is a proposal for
deps
and_build
that would be a breaking change to how the project is compiled and starts up, but would speed up development by caching the compiled versions of each dependency at the cost of more disk space (which is likely an acceptable tradeoff for most).Sample filesystem structure:
The expected outcome of this change would be when I switch between a branch that has dependency changes and a branch where I already compiled dependencies with different versions, there is no time-cost associated with compiling dependencies when I switch between those two branches after they've been compiled once each
The text was updated successfully, but these errors were encountered: