gpt4 book ai didi

clojurescript - 同一页面上的多个 ClojureScript 文件

转载 作者:行者123 更新时间:2023-12-01 05:17:22 26 4
gpt4 key购买 nike

我有一个使用 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以及所有 .cljsspec/clojurescript编译为 mainSpec.js .
当我加载 Jasmine 页面时, .js文件已加载,但测试未运行。
在控制台中,我得到一个 Error: Namespace "goog.debug.Error" already declared.两者 .js文件在顶部具有相同的 ~30k 行 google 关闭代码,这导致了错误。如果我从 mainSpec.js 中删除此代码它运行良好。
有什么方法可以告诉 cljsbuild 将此代码从规范文件中删除吗?

最佳答案

正如 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"}}]})

您的 jasmine 页面应该引用 spec.js 而不是 main.js - 引用两者是导致错误的原因。

关于clojurescript - 同一页面上的多个 ClojureScript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18987333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com