Skip to content

Commit 8bdcc9a

Browse files
author
dnolen
committed
Merged
2 parents 1163381 + d04287d commit 8bdcc9a

File tree

5 files changed

+62
-31
lines changed

5 files changed

+62
-31
lines changed

src/main/clojure/cljs/closure.clj

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,40 +1477,59 @@
14771477
(if (= :browser mode) "</script>');\n" "\n")))]
14781478
(map preload-str syms))))
14791479

1480-
(defn output-main-file [opts]
1481-
(let [asset-path (or (:asset-path opts)
1480+
(defn output-main-file
1481+
"Output an entry point. In the non-modules case, opts is simply compiler
1482+
options. When emitting a module entry point opts must contain :module-name,
1483+
fully expanded :modules and :inputs (all compiler IJavaScript input sources)."
1484+
[opts]
1485+
(assert (or (not (contains? opts :module-name))
1486+
(get (:modules opts) (:module-name opts)))
1487+
(str "Module " (:module-name opts) " does not exist"))
1488+
(let [module (get (:modules opts) (:module-name opts))
1489+
asset-path (or (:asset-path opts)
14821490
(util/output-directory opts))
14831491
closure-defines (json/write-str (:closure-defines opts))]
14841492
(case (:target opts)
14851493
:nodejs
1486-
(output-one-file opts
1494+
(output-one-file
1495+
(merge opts
1496+
(when module
1497+
{:output-to (:output-to module)}))
14871498
(add-header opts
1488-
(str "var path = require(\"path\");\n"
1489-
"try {\n"
1490-
" require(\"source-map-support\").install();\n"
1491-
"} catch(err) {\n"
1492-
"}\n"
1493-
"require(path.join(path.resolve(\".\"),\"" asset-path "\",\"goog\",\"bootstrap\",\"nodejs.js\"));\n"
1494-
"require(path.join(path.resolve(\".\"),\"" asset-path "\",\"cljs_deps.js\"));\n"
1495-
"goog.global.CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
1496-
(apply str (preloads (:preloads opts)))
1497-
(apply str
1498-
(map (fn [entry]
1499-
(str "goog.require(\"" (comp/munge entry) "\");\n"))
1500-
(if-let [entries (:entries opts)]
1501-
entries
1502-
[(:main opts)])))
1499+
(str (when (or (not module) (= :cljs-base (:module-name opts)))
1500+
(str "var path = require(\"path\");\n"
1501+
"try {\n"
1502+
" require(\"source-map-support\").install();\n"
1503+
"} catch(err) {\n"
1504+
"}\n"
1505+
"require(path.join(path.resolve(\".\"),\"" asset-path "\",\"goog\",\"bootstrap\",\"nodejs.js\"));\n"
1506+
"require(path.join(path.resolve(\".\"),\"" asset-path "\",\"cljs_deps.js\"));\n"
1507+
"goog.global.CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
1508+
(apply str (preloads (:preloads opts)))))
1509+
(apply str
1510+
(map (fn [entry]
1511+
(str "goog.require(\"" (comp/munge entry) "\");\n"))
1512+
(if-let [entries (when module (:entries module))]
1513+
entries
1514+
[(:main opts)])))
15031515
"goog.require(\"cljs.nodejscli\");\n")))
1504-
(output-one-file opts
1505-
(str "var CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
1506-
"if(typeof goog == \"undefined\") document.write('<script src=\"" asset-path "/goog/base.js\"></script>');\n"
1507-
"document.write('<script src=\"" asset-path "/cljs_deps.js\"></script>');\n"
1508-
"document.write('<script>if (typeof goog == \"undefined\") console.warn(\"ClojureScript could not load :main, did you forget to specify :asset-path?\");</script>');\n"
1509-
(apply str (preloads (:preloads opts) :browser))
1516+
(output-one-file
1517+
(merge opts
1518+
(when module
1519+
{:output-to (:output-to module)}))
1520+
(str (when (or (not module) (= :cljs-base (:module-name opts)))
1521+
(str "var CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
1522+
"var CLOSURE_NO_DEPS = true;\n"
1523+
"if(typeof goog == \"undefined\") document.write('<script src=\"" asset-path "/goog/base.js\"></script>');\n"
1524+
"document.write('<script src=\"" asset-path "/goog/deps.js\"></script>');\n"
1525+
"document.write('<script src=\"" asset-path "/cljs_deps.js\"></script>');\n"
1526+
"document.write('<script>if (typeof goog == \"undefined\") console.warn(\"ClojureScript could not load :main, did you forget to specify :asset-path?\");</script>');\n"
1527+
(apply str (preloads (:preloads opts) :browser))))
15101528
(apply str
15111529
(map (fn [entry]
1512-
(str "document.write('<script>goog.require(\"" (comp/munge entry)"\");</script>');\n"))
1513-
(if-let [entries (:entries opts)]
1530+
(when-not (= "goog" entry)
1531+
(str "document.write('<script>goog.require(\"" (comp/munge entry) "\");</script>');\n")))
1532+
(if-let [entries (when module (:entries module))]
15141533
entries
15151534
(when-let [main (:main opts)]
15161535
[main])))))))))
@@ -1770,14 +1789,16 @@
17701789
(spit goog-deps (slurp (io/resource "goog/deps.js")))
17711790
(cond
17721791
modules
1773-
(do
1792+
(let [modules' (module-graph/expand-modules modules sources)]
17741793
(output-deps)
17751794
(doall
17761795
(map
1777-
(fn [[module-name {:keys [output-to entries]}]]
1796+
(fn [[module-name _]]
17781797
(output-main-file
17791798
(merge opts
1780-
{:output-to output-to :entries entries})))
1799+
{:module-name module-name
1800+
:modules modules'
1801+
:inputs sources})))
17811802
modules)))
17821803

17831804
main

src/main/clojure/cljs/compiler.cljc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,10 @@
11021102
#?@(:clj
11031103
[(ana/foreign-dep? lib)
11041104
;; we only load foreign libraries under optimizations :none
1105-
(when (= :none optimizations)
1105+
;; under :modules we also elide loads, as the module loader will
1106+
;; have handled it - David
1107+
(when (and (= :none optimizations)
1108+
(not (contains? options :modules)))
11061109
(if (= :nodejs target)
11071110
;; under node.js we load foreign libs globally
11081111
(let [ijs (get js-dependency-index (name lib))]

src/test/cljs_build/loader_test/foo.cljs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
(ns loader-test.foo
22
(:require [goog.dom :as gdom]
33
[goog.events :as events]
4-
[cljs.loader :as loader])
4+
[cljs.loader :as loader]
5+
;[my.foreign]
6+
)
57
(:import [goog.events EventType]))
68

79
(enable-console-print!)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var foreign = function() {
2+
console.log("I'm foreign!")
3+
};

src/test/clojure/cljs/build_api_tests.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@
186186
{:output-dir output-dir
187187
:optimizations :none
188188
:verbose true
189+
;:foreign-libs [{:file "loader_test/foreign.js"
190+
; :provides ["my.foreign"]}]
189191
:modules
190192
{:foo
191193
{:output-to (str (io/file output-dir "foo.js"))

0 commit comments

Comments
 (0)