ClojureScript

报告问题

要报告问题,请在 ask.clojure.org 上的 ClojureScript 类别下提出一个问题,并用 problem 标签标记它。CLJS 开发人员可以评估并确定它是否是一个问题。如有必要,他们可以在 ClojureScript 问题跟踪器 中提交一个工单。

重要的是,在提交任何问题之前,您必须先彻底了解 快速入门。即使您是经验丰富的 ClojureScript 开发人员,这也是必读内容。

建议,但不是必需,先检查 现有的错误报告邮件列表 或 Freenode #clojurescript IRC 频道或 Slack 频道,确保问题尚未被报告过。

此外,确保您正在运行最新版本的 ClojureScript 会很有帮助。此外,检查 ClojureScript master 是谨慎的做法——当发现错误时,修复通常会很快提交(参见下面的说明)。

然而,必须使用 ClojureScript 本身来报告错误。下游工具通常以非平凡的方式与 ClojureScript 编译器交互,隔离 ClojureScript 问题的最佳方法是从报告中完全删除它们。

请通过从 master 构建 uberjar 并使用它来验证问题来报告问题。使用 cljs.main 与此 uberjar 创建一个最小的再现是理想的选择。或者,使用 cljdeps.edn 是可以接受的。不要使用任何其他第三方工具(Maven、Leiningen、Boot)。创建问题时,请将所有相关的说明和代码添加到工单中,以便直接或通过其他评论进行重现。请不要附加项目、项目链接、gist/pastebin 链接或压缩文件。

引导问题可能需要特殊考虑。有关更多详细信息,请参阅 报告引导问题

从 master 构建 uberjar

签出 ClojureScript 存储库。从项目的根目录运行以下命令

./script/uberjar

这将创建 target/cljs.jar

从 master 安装

验证问题时,首先检查问题是否已经在 master 中解决可能会有所帮助。不要使用此方法报告问题,它仅用于方便您自己验证 master。签出 ClojureScript 存储库。从项目的根目录运行以下命令

./script/build

这将把 ClojureScript 安装到您的本地 Maven。注意版本号(当它滚动出现时)。根据需要将其用于您的工具。

使用 git bisect 定位回归

如果您发现回归,在报告问题时识别有关第一个错误提交的信息将很有帮助。通过首先依赖于 ClojureScript 的签出作为本地根依赖项,然后使用 git bisect,这很容易做到。

例如,假设您发现了一个可以直接在 REPL 中重现的回归(如果不是,则可以使用下面的变体)。

首先签出 ClojureScript master 并 cd 到签出树的顶部。

假设您可以在 master 上重现问题,但 ClojureScript 1.10.748 工作正常,请在签出树的顶部发出以下命令

git bisect start
git bisect bad HEAD
git bisect good r1.10.748

然后(在另一个目录中)通过发出以下命令启动一个针对签出树当前状态的 REPL

clj -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:local/root "/<path-to-checkout>/clojurescript"}}}' -m cljs.main -r

测试您是否可以在 REPL 中重现问题,然后退出 REPL。

如果您无法重现问题,请在 ClojureScript 签出树中发出以下命令

git bisect good

或者,如果您能够重现问题

git bisect bad

如果二分搜索完成,git 将表明某个提交哈希是“第一个错误提交”。将所有这些文本复制到 JIRA 中。

否则,重新启动 REPL 并重复上述步骤,直到完成。

完成后,您可以发出以下命令来恢复您的 ClojureScript 签出

git bisect reset