4

我的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也会在那里呈现列表内容。顺便说一句,我想要一个用于list页面的 url,另一个用于detail.

问题:

我应该怎么做?

4

2 回答 2

2

init-fn使用 shadow-cljs,您可以在构建规范中指定多个具有不同 s 的模块。

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.jsanother-page.js.

于 2020-02-17T09:52:05.170 回答
2

过去 2 年的 ClojureScript 开发使用 Deps/CLI 工具和 Figwheel Main(又名 Figwheel 2.0)比使用旧的 Leiningen 方法要容易得多。只需查看页面Create a Build at 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

对于shadow-cljs,有代码拆分 ClojureScript示例应用程序和博客条目


注意:您还可以查看Extra Mains功能,但这更受限制。

于 2020-02-17T10:27:38.550 回答