我有一个ClojureScript项目,我正在编译" dev"模式,没有编译器优化。我会"跑"像这样,来自HTML,quick start docs中描述的。
<script src="/js/out/goog/base.js"></script>
<script src="/js/out/main.js"></script>
<script> goog.require("myapp.mymodule"); </script>
main.js
文件是ClojureScript编译器从.cljs
源文件生成的文件。
现在我在Leiningen项目中有第二个配置文件,可以实现高级编译器优化。正如所料,main.js
更改为包含大量混淆的Javascript。但现在上面的require
行失败了:
Error: goog.require could not find: myapp.mymodule
我还尝试用:export
标记我的一个函数:
(defn ^:export foo [] ...)
但是docs并未提及该符号的位置,我在window
或其他任何地方都看不到它。
那么,HTML如何调用已编译的ClojureScript来启动程序?
以下是我的project.clj的相关部分
:cljsbuild {
:builds {
:app {
:source-paths ["src/main/clj"]
:compiler {
:output-to "target/resources/public/js/out/main.js"
:output-dir "target/resources/public/js/out"
:asset-path "/js/out"
}
}
}
}
...
:profiles {
:uberjar {
:hooks [leiningen.cljsbuild]
:omit-source true
:cljsbuild {
:builds {
:app {
:compiler {:optimizations :advanced
:pretty-print false}
}
}
}
}
使用我运行的优化进行编译:
lein with-profile uberjar cljsbuild once
答案 0 :(得分:2)
您需要添加一些编译器选项,例如:output-to
和:source-path
。
您可以在https://clojurescript.org/reference/compiler-options找到选项列表。
如果您想查看最小生产构建的外观,请使用lein new cljsbuild-template <project-name>