我是 Clojure 和 ClojureScript 的忠实粉丝,我通常更喜欢在我的项目中使用 ClojureScript 而不是其他替代品,但有时让我无法使用它的一件事,尤其是在较小的项目中,是由 ~80kb 添加的在生成的 javascript 中包含 Google Closure 库,即使我在代码中没有使用 API。
有什么方法可以编译 ClojureScript 来避免这种额外的重量?
我是 Clojure 和 ClojureScript 的忠实粉丝,我通常更喜欢在我的项目中使用 ClojureScript 而不是其他替代品,但有时让我无法使用它的一件事,尤其是在较小的项目中,是由 ~80kb 添加的在生成的 javascript 中包含 Google Closure 库,即使我在代码中没有使用 API。
有什么方法可以编译 ClojureScript 来避免这种额外的重量?
额外的大小不是来自 Google Closure 库——如果您打开了高级优化,Closure 编译器将从最终的 JavaScript 中删除您未使用的任何 Closure 库代码。相反,JavaScript 看起来很大,因为那里有一个完整的 Clojure 运行时在其中实现诸如惰性序列、承诺和其他一切的东西。
更正:正如 Zubair 所指出的,以下步骤禁用了 Google Closure 优化,但不会从最终的 JavaScript 中删除 Google Closure 代码。正如其他答案所建议的那样,您应该选择高级优化来消除未使用的 JavaScript。
在ClojureScript: Up and Running中,作者解释了如何禁用 Google Closure 步骤:
如果
:optimizations
值为:none
[inproject.clj
],则根本不会调用 Google Closure Compiler,并且构建将直接写出 ClojureScript 编译器生成的 JavaScript。这种模式对于开发和调试很有用。但是,JavaScript 输出将被拆分到许多单独的文件中,需要在浏览器中进行略微不同的处理 [...]
请注意,这可能会或可能不会减少生成的 JavaScript 的大小,因为 Google Closure 做了相当多的工作来去除您的代码没有专门调用的任何内容。可能值得玩弄:optimizations
( :none
、和) 的各种值:whitespace
,看看每种情况下生成的 JavaScript 有多大。:simple
:advanced