diff --git a/src/main/clojure/cljs/cli.clj b/src/main/clojure/cljs/cli.clj
index da4f2761f..9087151c9 100644
--- a/src/main/clojure/cljs/cli.clj
+++ b/src/main/clojure/cljs/cli.clj
@@ -321,7 +321,8 @@ present"
reopts (merge repl-env-options (select-keys opts [:main :output-dir]))
_ (when (or ana/*verbose* (:verbose opts))
(util/debug-prn "REPL env options:" (pr-str reopts)))
- renv (apply (target->repl-env (:target options) repl-env) (mapcat identity reopts))]
+ renv (-> (apply (target->repl-env (:target options) repl-env) (mapcat identity reopts))
+ (assoc :compiler-opts opts))]
(repl/repl* renv
(assoc opts
::repl/fast-initial-prompt?
diff --git a/src/main/clojure/cljs/repl/browser.clj b/src/main/clojure/cljs/repl/browser.clj
index 2c907c6d1..9b333127e 100644
--- a/src/main/clojure/cljs/repl/browser.clj
+++ b/src/main/clojure/cljs/repl/browser.clj
@@ -182,7 +182,7 @@
(defn send-static
[{path :path :as request} conn
- {:keys [static-dir output-dir host port gzip?] :or {output-dir "out"} :as opts}]
+ {:keys [static-dir output-dir host port gzip? compiler-opts] :or {output-dir "out"} :as opts}]
(let [output-dir (when-not (.isAbsolute (io/file output-dir)) output-dir)]
(if (and static-dir (not= "/favicon.ico" path))
(let [path (if (= "/" path) "/index.html" path)
@@ -224,7 +224,11 @@
clojure.browser.repl/PORT ~port}
(merge (:closure-defines @browser-state))
cljsc/normalize-closure-defines
- json/write-str)]
+ json/write-str)
+ preloads (when-let [preloads (:preloads compiler-opts)]
+ (mapv (fn [ns-symb]
+ (str "document.write('');"))
+ preloads))]
(server/send-and-close conn 200
(str "var CLOSURE_UNCOMPILED_DEFINES = " closure-defines ";\n"
"var CLOSURE_NO_DEPS = true;\n"
@@ -233,6 +237,7 @@
(when (.exists (io/file output-dir "cljs_deps.js"))
(str "document.write('');\n"))
"document.write('');\n"
+ (when preloads (str/join "\n" preloads))
"document.write('');\n")
"text/javascript" "UTF-8"))