【问题标题】:ClojureScript's separate builds for multipage web appClojureScript 为多页 Web 应用程序单独构建
【发布时间】:2016-06-01 09:15:36
【问题描述】:

我有一个 Web 应用程序,它在后端使用 Clojure,在前端使用 ClojureScript,它由几个页面组成,每个页面都需要适当的构建 js 文件。

现在我知道 cljsbuild 可以构建单独的构建(如果在配置文件的 :builds 部分中指定),前提是每个构建都有自己的文件夹。

问题是:现在我需要在每个文件夹中复制一些共享代码才能正确构建。 此外,我必须创建一个全新的文件夹来使用甚至是微不足道的 cljs 文件,这真的很烦人,更不用说每次编辑我的 project.clj 的 :builds 部分。

所以,现在是 2016 年,到目前为止我看到的所有关于 ClojureScript 的教程都是针对单页应用程序的。 对于我正在寻找的东西,是否有任何资源或最佳实践,我是否遗漏了什么?

如何在标准的多页面 Clojure 堆栈 Web 应用程序中使用 ClojureScript?

谢谢。

【问题讨论】:

    标签: clojure clojurescript cljsbuild


    【解决方案1】:

    :modules compiler option 可用于将您的 clojurescript 构建拆分为可按需使用的优化模块。

    【讨论】:

    • 这个看起来像我需要的。谢谢,我去看看!
    【解决方案2】:

    你真的需要多个 cljs 构建吗?

    你不能只创建一个,exporting 你需要的组件并在需要时将它们连接到 dom 中吗?

    【讨论】:

    • 我假设在您的情况下,我需要在每个页面上包含单个构建的 js 文件?
    • 是的。你为什么不应该?你可以使用命名空间来组织你的代码。
    • 你能详细说明一下吗,可能是显示一些代码,链接?问题是 - 这是我第一次处理 Google Closure 库本身,可能就是问题所在。任何例子都值得赞赏。
    【解决方案3】:

    这可能就像使用 require 从一个命名空间到另一个命名空间一样简单。

    例如,假设您有以下结构:

    project ├── src │   └── cljs │   ├── page1 │   ├── page2 │   │  

    您可以从page2 内部page1.subnamespace 命名空间require 中的事物。

    【讨论】:

    • 是的,我知道了,但是如何才能包含构建中仅在特定 html 页面中需要的功能?即使我需要一小部分 cljs 代码库,我是否应该在每个页面上包含整个编译的 js 内容(可以是 >x MB)?
    • 据我所知,没有办法分割构建,因为谷歌闭包编译器假设每次都处理整个内容(因此消除了死代码)。
    • 所以最好的做法是构建单个 js 文件,将其包含在每个页面中,然后仅从中调用该页面所需的内容?
    • 我不知道“最佳实践”。这可能是一种权衡(首次加载速度较慢,由于缓存而下一次加载速度更快),这使您更接近 SPA。或者你也可以考虑为每个页面构建一个,知道会有一些冗余,但初始页面加载会更快,并且不会有不必要的代码(由于 google 关闭死代码消除)。
    • 关于您之前的评论:“即使我需要一小部分 cljs 代码库,每个页面上的整个编译的 js 东西(可以是 >x MB)”不应该发生,因为关闭编译器消除死代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多