I am writing a library to be used in other elixir apps.
Suppose I have a module that needs to use
something from another lib. In my example I am using Keathley’s Norm
defmodule MyLib.Something do
use Norm
...
end
Well in tests everything looks fine, but when I try to use my library from a demo app, I get an error:
error: module Norm is not loaded and could not be found
Ok fair enough. But how am I supposed to do it?
Even if I install norm on both the app and the library, I get that error. Could you please explain to me on a conceptual level why that would be?
Can you explain what specifically you mean by “install” here?
Typically I’d expect mylib
to declare a dependency on norm
, so adding mylib
to the application should install it as well.
1 Like
I think this resource will help you:
https://hexdocs.pm/elixir/alias-require-and-import.html
It provides an explanation for aliasing, requiring, imports etc.
1 Like
Ya that was my thinking as well! But apparently not…
By install, I mean going to mylib’s mix.ex, adding norm to the deps, running mix deps.get
It works fine in isolation, whether running tests in mylib, or opening IEX in mylib. So I know it does exist.
However, as soon as I depend on mylib from some phoenix application, and try to compile the phoenix app, it says norm doesn’t exist.
Even if I then add norm to the phoenix app AND to mylib. Still doesn’t exist. I am baffled.
Figured it out. I was running mix deps.compile
but it needed the --force
flag. Not positive why. Don’t even care.