多页应用的试剂配置



我的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}}}}

我在我的list.html中包含app.js,使用 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页面的网址,另一个用于detail的网址。

问题:

我应该怎么做?

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

您的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

过去 2 年的 ClojureScript 开发使用 Deps/CLI 工具以及 Figwheel Main(又名 Figwheel 2.0(比使用旧的 Leiningen 方法要容易得多。 只需查看页面 在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示例应用程序和博客条目。


注意:您也可以查看额外电源功能,但这更受限制。

最新更新