多页面应用的试剂配置
Reagent configuration for multi-page applications
我的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
中也会在那里呈现列表内容。顺便说一句,我想要一个 url 用于 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.js
和 another-page.js
。
过去 2 年的 ClojureScript 开发使用 Deps/CLI 工具和 Figwheel Main(a.k.a Figwheel 2.0)比使用旧的 Leiningen 方法更容易。只需查看 figwheel.org
处的页面 Create a Build,然后创建多个 *.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
一定要从头看到Code Splitting documentation for Figwheel, and Code Splitting on clojurescript.org
. Of course, be sure to go through all of the Tutorial and Documentation。享受吧!
对于shadow-cljs
,有Code Splitting ClojureScript example app and a blog entry。
注意:您也可以查看 Extra Mains 功能,但这个功能比较有限。
我的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
中也会在那里呈现列表内容。顺便说一句,我想要一个 url 用于 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.js
和 another-page.js
。
过去 2 年的 ClojureScript 开发使用 Deps/CLI 工具和 Figwheel Main(a.k.a Figwheel 2.0)比使用旧的 Leiningen 方法更容易。只需查看 figwheel.org
处的页面 Create a Build,然后创建多个 *.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
一定要从头看到Code Splitting documentation for Figwheel, and Code Splitting on clojurescript.org
. Of course, be sure to go through all of the Tutorial and Documentation。享受吧!
对于shadow-cljs
,有Code Splitting ClojureScript example app and a blog entry。
注意:您也可以查看 Extra Mains 功能,但这个功能比较有限。