Skip to content

Commit 6950aff

Browse files
au-phiwareswannodette
authored andcommitted
CLJS-2746 Missing provides for JS modules
Prior to this change, JS modules are converted my writing a single goog.provide statement that corresponds to the file path and name of the module. The .getProvides method (of another module) may use a shorter name and this means that the ClojureScript compiler can never find the module by this shorter name. This change emits a goog.provide statement for each name specified in the provides list of the IJavaScriptFile.
1 parent ec1e416 commit 6950aff

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/main/clojure/cljs/closure.clj

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,15 +1830,16 @@
18301830
"IMPORTED_SCRIPT" :imported-script))
18311831

18321832
(defn add-converted-source
1833-
[closure-compiler inputs-by-name opts {:keys [file-min file requires] :as ijs}]
1833+
[closure-compiler inputs-by-name opts {:keys [file-min file provides requires] :as ijs}]
18341834
(let [processed-file (if-let [min (and (#{:advanced :simple} (:optimizations opts))
18351835
file-min)]
18361836
min
18371837
file)
18381838
processed-file (string/replace processed-file "\\" "/")
18391839
^CompilerInput input (get inputs-by-name processed-file)
18401840
^Node ast-root (.getAstRoot input closure-compiler)
1841-
module-name (ModuleNames/fileToModuleName processed-file)
1841+
provides (distinct (map #(ModuleNames/fileToModuleName %)
1842+
(cons processed-file provides)))
18421843
;; getJsModuleType returns NONE for ES6 files, but getLoadsFlags module returns es6 for those
18431844
module-type (or (some-> (.get (.getLoadFlags input) "module") keyword)
18441845
(module-type->keyword (.getJsModuleType input)))]
@@ -1848,7 +1849,9 @@
18481849
;; Add goog.provide/require calls ourselves, not emited by Closure since
18491850
;; https://github.com/google/closure-compiler/pull/2641
18501851
(str
1851-
"goog.provide(\"" module-name "\");\n"
1852+
(apply str (map (fn [n]
1853+
(str "goog.provide(\"" n "\");\n"))
1854+
provides))
18521855
(->> (.getRequires input)
18531856
;; v20180204 returns string
18541857
;; next Closure returns DependencyInfo.Require object

0 commit comments

Comments
 (0)