I have a package and I’m extending a function to create plots. The main package depends on another third package, let’s say StaticArrays for simplicity, and the extension also uses the functions of StaticArrays. Should StaticArrays be also a weakdep for the extension?
Something like:
module MainPkg
using StaticArrays
export f
function f end
end
extension:
module MyPkgExtension
using Plots # the heavy weakdep
using StaticArrays # should this be also a weakdep? Is it available?
using MyPkg
MyPkg.f(x::SVector) = plot(x)
end
I’m unsure if StaticArrays should be also a weakdep, and also if it is automatically “available” in the MyPkgExtension module for being a hard dependency of MyPkg.
From my tests it seems to be available, but I feel like doing something that can break easily.
I think one is only supposed to load the targets for the extension. Other dependencies are to be loaded transitively, e.g. as using MainPkg.StaticArrays, instead of using StaticArrays. This avoids cycles in package loading.
Although I’ve not kept up with the development, and this may not be necessary anymore.
Uhm, in my package where I do not do this “properly”, meaning, I don’t load the dependency by MainPkg.StaticArrays, I don’t get any warning or error message on Julia nightly, and the dev docs don’t mention that either. So it is unclear there if one should be careful with that, or no.
Nevertheless, when I changed my package to import the packages from the main package, I started getting these warnings:
[ Info: Precompiling ComplexMixturesPlotting [72ee4039-6c6c-5d3e-ab5f-b48662531fd4]
┌ Warning: Module ComplexMixtures with build ID fafbfcfd-adc6-8079-0006-28dffa1c20f0 is missing from the cache.
│ This may mean ComplexMixtures [6f35c628-ac57-5bae-8ea9-703a8964f6e9] does not support precompilation but is imported by a module that does.
└ @ Base loading.jl:1948
[ Info: Skipping precompilation since __precompile__(false). Importing ComplexMixturesPlotting [72ee4039-6c6c-5d3e-ab5f-b48662531fd4].