【问题标题】:ClojureScript bRepl does not respond at allClojureScript bRepl 根本没有响应
【发布时间】:2013-10-10 00:27:48
【问题描述】:

我一直在修补 clojure 和 clojurescript 一段时间,但我总是发现浏览器 repl 非常无响应。它通常会挂起而不给出结果,或者抛出一个损坏的管道异常。现在我处于它总是拒绝工作的情况。

假设我下载了modern-cljs 教程第2 部分,我执行了所有步骤来启动页面、加载已编译的javascript 并启动bRepl。当我尝试很好地评估像 (+ 3 4) 这样简单的东西时,它就是行不通的。

我使用的是 OSX 10.8.4,我的 leiningen 版本是 Java 1.6.0_51 Java HotSpot(TM) 64 位服务器 VM 上的 2.3.2。非常感谢任何帮助。

【问题讨论】:

  • 通常的解决方案是在您启动 cljs repl 之后刷新页面。您的问题不清楚您是否按照该步骤进行操作,您可以确认吗?
  • 我也试过了,但它不起作用。我想知道 leiningen 或相关工具是否有某种清理/刷新依赖项?
  • 尝试在其他选项卡或浏览器中打开您尝试连接的页面。

标签: clojure leiningen read-eval-print-loop clojurescript


【解决方案1】:

您在 project.clj 中指定了哪个 ClojureScript 版本?如果您没有指定特定的版本,这可能是您的麻烦的根源。 0.0-1913是最新的。

【讨论】:

    【解决方案2】:

    我建议克隆 modern-cljs 存储库,然后检查 tutorial-02 分支,然后清理并重新编译。

    git clone https://github.com/magomimmo/modern-cljs.git
    cd modern-cljs
    git checkout tutorial-02
    lein do clean, cljsbuild clean
    lein cljsbuild once
    

    确保你的 http-server 正在运行(我假设端口是 3000)并且它的根设置为modern-cljs/resources/public 目录 然后运行 ​​repl-listen 子任务如下:

    lein trampoline cljsbuild repl-listen
    

    等待 cljs 提示。然后访问localhost:3000/simple.html URL 并等待与 brepl 的连接准备就绪。

    在 cljs 提示符下,您现在应该能够计算 cljs 表达式。最后,重新加载上面的 URL。

    如果还是不行,尝试删除你的maven仓库:

    rm -rf ~/.m2/repository
    

    并重做lein do 命令链中的所有内容。

    最终您可以按照https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-18.md#the-need-of-a-more-comfortable-brepl-experience 教程设置使用https://github.com/cemerick/piggieback 的更舒适的 bREPL

    【讨论】:

      【解决方案3】:

      我在这个话题上也遇到了一些问题。以下是对我有帮助的技巧:

      1. 清洁部门:rm -rf ~/.m2/*
      2. 在您的项目根目录中下载 lein deps: lein deps
      3. 我看到这条消息:"broken pipe" 上次 brepl 交互的时间过长。所以,刷新浏览器就可以了
      4. 有时我的 brepl 在我第一次尝试评估代码时挂起,再次尝试刷新浏览器
      5. 在启动 brepl 之前不要忘记运行:lein cljsbuild once

      祝你好运

      PS:无论如何,如果您想获得舒适的 brepl 体验,您必须查看 https://github.com/cemerick/austin 。我已经测试了这个 brepl 并且工作正常 https://github.com/juanantonioruz/client

      【讨论】:

      • 我最终使用 Austin 作为我的默认 brepl。有时我仍然会收到 Broken Pipe 异常,刷新页面也无济于事。所以我只是重新启动repl,然后就可以正常工作了。
      【解决方案4】:

      当我忘记从浏览器中调用 repl/connect 时,我还看到 REPL 完全挂起。由于没有输出,因此很难诊断。在您尝试更具侵入性的补救措施之前,值得进行验证。

      【讨论】:

        【解决方案5】:

        您应该尝试不安全地使用 Chromium:

        • 操作系统:

          open -a Chromium --args --disable-web-security

        • Linux:

          chromium --disable-web-security

        然后在不安全的浏览器中访问你的页面并尝试连接到 brepl。


        解释:

        因为brepl 在端口 9000 上运行时,托管该页面的 Web 服务器必然使用一个不同端口,这构成了XSS(请参阅[此堆栈溢出讨论])。

        解决此问题的最简单方法是不安全地使用 Chromium 进行调试,但如果需要,您可以通过其他方式启用 XSS。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-14
          相关资源
          最近更新 更多