-
Notifications
You must be signed in to change notification settings - Fork 125
Description
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
Lines 40 to 43 in 9feb2a1
| module (->> (str lib) | |
| (re-find #"\.([a-z0-9-]+)") | |
| second | |
| keyword)] |
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)
