ClojureScript

回報問題

若要回報問題,請在 ask.clojure.org 的 ClojureScript 類別下提出問題,並加上 problem 標籤。CLJS 開發人員可以評估並判斷是否為問題。如有必要,他們可以在 ClojureScript 問題追蹤器 中提交工單。

在提交任何問題之前,務必先徹底了解快速入門。即使您是經驗豐富的 ClojureScript 開發人員,這也是必讀的內容。

首先檢查現有的錯誤報告郵件列表,或是 Freenode #clojurescript IRC 頻道或 Slack 頻道,並確保該問題之前尚未被回報過,這會有幫助,但並非必要。

此外,確保您正在執行最新發布的 ClojureScript 版本也會有所幫助。此外,檢查 ClojureScript master 版本是明智之舉 — 經常在發現錯誤時,會快速提交修復(請參閱下方說明)。

然而,重要的是僅使用 ClojureScript 回報錯誤。下游工具通常會以非簡單的方式與 ClojureScript 編譯器互動,而將問題隔離到 ClojureScript 的最佳方法是將它們從報告中完全移除。

請透過從 master 建置 uberjar 並使用它來驗證問題,以此回報問題。使用此 uberjar 與 cljs.main 建立最小重現是理想的作法。或者,使用 cljdeps.edn 也是可以接受的。請勿使用任何其他第三方工具 (Maven、Leiningen、Boot)。建立問題時,請將所有相關說明和程式碼加入到工單中,以便直接重現,或透過其他評論加入。請勿附加專案、專案連結、gist/pastebin 連結,或 zip 檔案。

啟動問題可能需要特別考慮。請參閱回報啟動問題以了解更多詳細資訊。

從 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