我是Clojure和ClojureScript的忠实粉丝,通常情况下我更愿意在我的项目中使用ClojureScript而不是其他替代品。但有一件事情有时会让我望而却步,特别是在小型项目中,就是在生成的JavaScript中包含Google Closure库所增加的大约80kb的代码,即使我在我的代码中没有使用这些API。
是否有一种编译ClojureScript的方法可以避免这个额外的负担呢?
我是Clojure和ClojureScript的忠实粉丝,通常情况下我更愿意在我的项目中使用ClojureScript而不是其他替代品。但有一件事情有时会让我望而却步,特别是在小型项目中,就是在生成的JavaScript中包含Google Closure库所增加的大约80kb的代码,即使我在我的代码中没有使用这些API。
是否有一种编译ClojureScript的方法可以避免这个额外的负担呢?
这个额外的大小并不是来自于Google Closure库 --- 如果您开启了高级优化,Closure编译器将从最终的JavaScript中移除您没有使用的任何Closure库代码。相反,JavaScript看起来很大,因为其中包含了整个Clojure运行时,实现了像惰性序列、promises和其他所有东西一样的功能。
更正:正如Zubair指出的那样,下面的步骤禁用了Google Closure优化,但并未从最终JavaScript中消除Google Closure代码。您应该选择高级优化以消除未使用的JavaScript,就像其他答案建议的那样。
在ClojureScript: Up and Running中,作者解释了如何禁用Google Closure步骤:
使用
project.clj
中的:optimizations
值为:none
,Google Closure编译器将根本不会被调用,构建将直接编写ClojureScript编译器生成的JavaScript。这种模式对于开发和调试非常有用。但是,JavaScript输出将分成许多单独的文件,在浏览器中需要稍微不同的处理方式[...]。
请注意,这可能会减少所生成JavaScript的大小,因为Google Closure会执行大量工作以剥离您的代码未明确调用的任何内容。最好尝试使用各种:optimizations
值(:none
、:whitespace
、:simple
和:advanced
),并查看每种情况下生成的JavaScript的大小。