Конфигурация реагента для многостраничных приложений - PullRequest
2 голосов
/ 17 февраля 2020

My project.clj имеет,

  :cljsbuild {:builds
              {:app
               {:source-paths ["src/cljs" "src/cljc"]
                :compiler {:output-to "target/cljsbuild/public/js/app.js"
                           :output-dir "target/cljsbuild/public/js/out"
                           :main "my.core"
                           :asset-path "/js/out"
                           :optimizations :none
                           :source-map true
                           :pretty-print true}}}}

, и я включаю app.js в мои list.html, используя Selmer , например,

{% block page-scripts %}
{% script "/js/app.js" %}
{% endblock %}

в конце моего list.cljs у меня пока

(r/render [list] (.getElementById js/document "content"))

пока все хорошо.

Теперь я хотел бы иметь еще одну страницу, скажем detail.cljs, что я тоже нравится рендерить аналогично,

(r/render [detail] (.getElementById js/document "content"))

Проблема в том, что у меня просто есть один app.js, и в том числе в detail.html там тоже будет отображаться содержимое списка. Кстати, я хочу один URL для list страницы, а другой для detail.

Вопрос:

Как мне go об этом?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

За последние 2 года разработку ClojureScript гораздо проще осуществить с помощью средства Deps / CLI вместе с Figwheel Main (он же Figwheel 2.0), а не с более старым методом Leiningen. Просто посмотрите на страницу Создайте Build на figwheel.org, а затем создайте несколько *.cljs.edn файлов, таких как:

some-page.cljs.edn
another-page.cljs.edn
...

Каждый из них может быть простым:

{:main some-page.core}

и скомпилируйте с помощью:

clojure -m figwheel.main --build-once some-page

, который создаст выходной файл

target/public/cljs-out/some-page-main.js

Обязательно посмотрите Разделение кода документация для Figwheel и Код разделения на clojurescript.org. Конечно, обязательно с до go во всех Учебниках и Документация с самого начала. Наслаждайтесь!

Для shadow-cljs имеется Пример приложения ClojureScript с разделением кода и запись в блоге .


Примечание. Также обратите внимание на функцию Extra Mains , но она более ограничена.

2 голосов
/ 17 февраля 2020

Используя shadow-cl js, вы можете указать несколько модулей с разными init-fn s в вашей сборочной спецификации c.

Ваш shadow-cljs.edn может содержать что-то вроде этого:

{:builds {:client {:target "browser"
                   :modules {:some-page {:init-fn org.example.foo/run}
                             :another-page {:init-fn org.example.bar/run
                                            :depends-on #{:some-page}}}}}}

Имена файлов .js определяются по имени модуля, здесь some-page.js и another-page.js.

...