作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 Jasmine 测试 JavaScript 的项目。我正在尝试切换到使用 ClojureScript 作为前端。我的 project.clj
就好像
(defproject myproject "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.5.1"]
[org.clojure/clojurescript"0.0-1889"]
[org.clojure/google-closure-library-third-party "0.0-2029"]
[domina "1.0.0"]
[hiccups "0.2.0"]]
:plugins [[lein-cljsbuild "0.3.3"]]
:cljsbuild {
:builds [{
:source-paths ["src/clojurescript"]
:compiler {
:output-to "public/javascripts/main.js"
:optimizations :whitespace
:pretty-print true}}
{
:source-paths ["spec/clojurescript"]
:compiler {
:output-to "spec/javascripts/mainSpec.js"
:optimizations :whitespace
:pretty-print true}}]})
.cljs
src/clojurescript
中的文件编译为
main.js
以及所有
.cljs
在
spec/clojurescript
编译为
mainSpec.js
.
.js
文件已加载,但测试未运行。
Error: Namespace "goog.debug.Error" already declared.
两者
.js
文件在顶部具有相同的 ~30k 行 google 关闭代码,这导致了错误。如果我从
mainSpec.js
中删除此代码它运行良好。
最佳答案
正如 Jared314 和 Zubair 所指出的,您遇到的问题是由于试图在同一页面中包含两个 clojurescript 编译输出而引起的。 Clojurescript/Google Closure 期望做一个“全世界”的编译,即编译器期望整个页面的所有代码都传递给编译器,以便它可以对其进行优化、重命名函数,并最终吐出一个单个 javascript 文件。它并非旨在生成多个协同工作的输出文件。
解决问题的“正确”方法是生成两个单独使用的输出:一个用于运行应用程序的 main.js 文件,以及一个包含 main 中的所有代码以及 spec 中用于测试的代码的 spec.js 文件.你可以通过设置你的项目来做到这一点:
:cljsbuild {
:builds [{
:source-paths ["src/clojurescript"]
:compiler {:output-to "public/javascripts/main.js"}}
{
:source-paths ["src/clojurescript" "spec/clojurescript"]
:compiler {:output-to "spec/javascripts/spec.js"}}]})
关于clojurescript - 同一页面上的多个 ClojureScript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18987333/
我是一名优秀的程序员,十分优秀!