use*_*763 2 clojure leiningen clojurescript reagent
看起来这应该很简单,我认为这是......直到我从运行Figwheel切换到运行JAR文件并且它停止工作.
问题可以简化为一个非常简单的例子:
使用Leiningen"Reagent"模板制作一个名为"buttontest"的新应用.
在"ns"声明下面的core.cljs中添加一些脚本:
(defn greet [] (js/alert "Hi!"))
Run Code Online (Sandbox Code Playgroud)
在handler.clj中添加一个静态按钮:
(defn loading-page [] (html5 (head)
[:body {:class "body-container"} mount-target
;v v v INSERTED THIS
[:button {:onclick "buttontest.core.greet()"} "Say Hello"]
;^ ^ ^
(include-js "/js/app.js")]))
Run Code Online (Sandbox Code Playgroud)
做一次"lein cljsbuild"和"lein figwheel".浏览到该网站."Say Hello"按钮将在单击时触发警报.
回到shell中,执行"lein uberjar"并使用Java运行生成的.JAR文件.浏览到该网站.单击时,"Say Hello"按钮将不执行任何操作.控制台显示"buttontest未定义".
我尝试了各种各样的东西(修改/删除"onclick"属性中的命名空间限定,手动包括其他.JS文件等),没有运气.我觉得我错过了一些明显的东西.
有任何想法吗?谢谢.
小智 5
尝试给你的greet函数exportmeta标志:
(defn ^:export greet ...)
Run Code Online (Sandbox Code Playgroud)
我想:advanced编译优化会破坏命名空间/函数名称,并:export禁止它(或类似的东西).