В общем, проект Luminus с поддержкой ClojureScript будет компилировать весь код ClojureScript в один файл app.js
, как в этом блоке файла project.clj
(из проекта, который я только что создал с lein new luminus guestbook +h2 +immutant +cljs
, где +cljs
- важный бит):
:cljsbuild{:builds
{:app
{:source-paths ["src/cljs" "src/cljc" "env/dev/cljs"]
:figwheel {:on-jsload "guestbook.core/mount-components"}
:compiler
{:main "guestbook.app"
:asset-path "/js/out"
:output-to "target/cljsbuild/public/js/app.js" ;; <= THIS
:output-dir "target/cljsbuild/public/js/out"
:source-map true
:optimizations :none
:pretty-print true}}}}
Это очень удобное значение по умолчанию для одностраничных приложений (например, Angular или React), но я думаю, что вы думаете о веб-сайте с другим HTML страниц, каждая из которых включает в себя отдельный файл JavaScript (в этом случае все скомпилировано в один файл JavaScript).
Если вы хотите вызывать разные функции (например, из разных пространств имен), вы Вам нужно будет их экспортировать (чтобы они были легко доступны из JavaScript), а затем вызывать каждую функцию в соответствующем файле HTML, примерно так:
...
<!-- in test.html -->
{% script "/js/app.js" %}
<script>
guestbook.test.init();
</script>
...
в src/cljs/guestbook/test.cljs
(ns guestbook.test)
(defn mount-components []
(let [content (js/document.getElementById "app")]
(while (.hasChildNodes content)
(.removeChild content (.-lastChild content)))
(.appendChild content (js/document.createTextNode "Welcome to the test page"))))
(defn ^:export init []
(mount-components))
Кроме того, не забудьте перестроить файлы ClojureScript. Вы можете оставить другой терминал, выполняющий следующую команду, чтобы перекомпилировать любые файлы ClojureScript при их изменении: lein cljsbuild auto