Hi there!
I attempted to use the rum/require-lazy macro for code-splitting modules but ran into some unexpected behavior with the module-loading logic. I have the following (simplified) build config and namespace structure:
;; shadow-cljs.edn
{:builds {:client {:target :browser
:module-loader true
:modules {:client {:entries [my-app.client]}
:room {:entries [my-app.components.room]
:depends-on #{:client}}}}}}
;; my-app.some-other-page
(require-lazy '[my-app.components.room :refer [Room])
Expected behavior
When I load the some-other-page component, I expect the module loader to load the :room module specified in my build config
Actual behavior
However, the code emitted by the require-lazy macro attempts to load a nonexistent :components module (see screenshot), which creates a runtime exception because I don't have a :components module.
Other notes
The source of this issue is at
|
module (->> (str lib) |
|
(re-find #"\.([a-z0-9-]+)") |
|
second |
|
keyword)] |
, where the regex grabs
components from
[my-app.components.room] and ignores
room. If I were specifying modules, I would assume that we grab the last token from a required namespace e.g.
room from
[my-app.components.room]. If it was intentional to resolve to
components with your regex, could you share your reasoning?
Otherwise if you agree that extracting room makes more sense, I wonder if we could simplify the regex to make things a bit more explicit. I'm happy to create a PR
(-> (str module)
(clojure.string/split #"\.")
last
keyword)
Screenshot of error loading components module:

Hi there!
I attempted to use the
rum/require-lazymacro for code-splitting modules but ran into some unexpected behavior with the module-loading logic. I have the following (simplified) build config and namespace structure:Expected behavior
When I load the
some-other-pagecomponent, I expect the module loader to load the:roommodule specified in my build configActual behavior
However, the code emitted by the
require-lazymacro attempts to load a nonexistent:componentsmodule (see screenshot), which creates a runtime exception because I don't have a:componentsmodule.Other notes
The source of this issue is at
rum/src/rum/lazy_loader.cljc
Lines 40 to 43 in 9feb2a1
componentsfrom[my-app.components.room]and ignoresroom. If I were specifying modules, I would assume that we grab the last token from a required namespace e.g.roomfrom[my-app.components.room]. If it was intentional to resolve tocomponentswith your regex, could you share your reasoning?Otherwise if you agree that extracting
roommakes more sense, I wonder if we could simplify the regex to make things a bit more explicit. I'm happy to create a PRScreenshot of error loading

componentsmodule: