Skip to content

Commit 8d50cd8

Browse files
r0mandnolen
authored and
dnolen
committed
Fix module compilation when modules aren't required
1 parent f73c426 commit 8d50cd8

File tree

5 files changed

+55
-5
lines changed

5 files changed

+55
-5
lines changed

src/main/clojure/cljs/closure.clj

+18-5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
[cljs.env :as env]
4242
[cljs.js-deps :as deps]
4343
[clojure.java.io :as io]
44+
[clojure.set :as set]
4445
[clojure.string :as string]
4546
[clojure.data.json :as json])
4647
(:import [java.io File BufferedInputStream StringWriter]
@@ -725,13 +726,25 @@
725726
(find-cljs-dependencies ["cljs.core" "clojure.string"])
726727
)
727728

729+
(defn- module-entries
730+
"Return the module entries of `compile-opts` as a set."
731+
[compile-opts]
732+
(->> compile-opts :modules vals
733+
(map :entries)
734+
(remove nil?)
735+
(apply concat)
736+
(set)))
737+
728738
(defn add-dependency-sources
729739
"Given list of IJavaScript objects, produce a new sequence of IJavaScript objects
730740
of all dependencies of inputs."
731-
[inputs]
732-
(let [inputs (set inputs)
733-
requires (set (mapcat deps/-requires inputs))]
734-
(into inputs (find-cljs-dependencies requires))))
741+
([inputs]
742+
(add-dependency-sources inputs nil))
743+
([inputs compile-opts]
744+
(let [inputs (set inputs)
745+
requires (set (mapcat deps/-requires inputs))
746+
module-entries (module-entries compile-opts)]
747+
(into inputs (find-cljs-dependencies (set/union requires module-entries))))))
735748

736749
(defn check-unprovided
737750
[inputs]
@@ -1850,7 +1863,7 @@
18501863
(assoc all-opts :output-file (:output-to all-opts))
18511864
all-opts)
18521865
js-sources (-> (-find-sources source all-opts)
1853-
add-dependency-sources
1866+
(add-dependency-sources compile-opts)
18541867
deps/dependency-order
18551868
(compile-sources compiler-stats compile-opts)
18561869
(add-js-sources all-opts)

src/test/cljs/module_test/main.cljs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(ns module-test.main)
2+
3+
(defn ^:export main []
4+
(println "Loading modules A and B ..."))
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(ns module-test.modules.a)
2+
3+
(defn ^:export main []
4+
(println "Module A loaded."))
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(ns module-test.modules.b)
2+
3+
(defn ^:export main []
4+
(println "Module B loaded."))

src/test/clojure/cljs/build_api_tests.clj

+25
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,28 @@
120120
(build srcs opts)
121121
(is (not (every? #(zero? (.length %)) [common-tmp app-tmp]))
122122
"The files are not empty after compilation")))
123+
124+
(deftest cljs-1500-test-modules
125+
(let [module-main (io/file "out/module-main.js")
126+
module-a (io/file "out/module-a.js")
127+
module-b (io/file "out/module-b.js")]
128+
(.delete module-main)
129+
(.delete module-a)
130+
(.delete module-b)
131+
(build
132+
(inputs "src/test/cljs")
133+
{:main "module-test.main"
134+
:optimizations :advanced
135+
:verbose true
136+
:modules
137+
{:cljs-base
138+
{:output-to (str module-main)}
139+
:module-a
140+
{:output-to (str module-a)
141+
:entries #{'module-test.modules.a}}
142+
:module-b
143+
{:output-to (str module-b)
144+
:entries #{'module-test.modules.b}}}})
145+
(is (re-find #"Loading modules A and B" (slurp module-main)))
146+
(is (re-find #"Module A loaded" (slurp module-a)))
147+
(is (re-find #"Module B loaded" (slurp module-b)))))

0 commit comments

Comments
 (0)