2012-06-12 42 views
27

Tôi xin lỗi vì câu hỏi có vẻ ngu ngốc này, nhưng tôi đã chơi với ClojureScript và tắt trong một vài tuần nay, và tôi không thể tìm ra một câu hỏi đơn giản này:Làm thế nào để Gỡ lỗi ClojureScript

thế nào thế nào để tôi gỡ lỗi ClojureScript?

Vì vậy, đây là vấn đề:

  1. tôi viết file * tôi .cjs
  2. tôi chạy cljsc/xây dựng ...
  3. tôi tải lên trang web của tôi.
  4. Đã xảy ra sự cố.
  5. Tôi mở bảng điều khiển firefox.
  6. Tôi nhận được một dòng trong số được tạo ra js, mà tôi thấy khó hiểu, và tôi không biết dòng đầu tiên của tệp gốc từ đó.

Câu hỏi của tôi:

đúng cách để phát triển các ứng dụng ClojureScript là gì?

PS Tôi đã xem ClojureScriptOne - những gì tôi không thích về nó là nó kết hợp với nhau một loạt các công nghệ cùng một lúc; và tôi muốn tự mình hiểu cách sử dụng từng mảnh riêng lẻ trước khi kết hợp tất cả lại với nhau.

Tôi cảm thấy thoải mái với nhẫn + ria + compojure, [chủ yếu là vì tôi có thể sử dụng kỹ thuật gỡ lỗi Clojure chuẩn của mình] nhưng ClojureScript là một con thú khác.

CẬP NHẬT: Mọi thứ đã thay đổi một chút kể từ khi câu hỏi này được hỏi lần đầu tiên. Cách thích hợp để gỡ lỗi các ứng dụng ClojureScript những ngày này là để cho phép bản đồ nguồn - http://github.com/clojure/clojurescript/wiki/Source-maps

Trả lời

18

UPDATE: Tôi đã lấy sự tự do để thay đổi câu trả lời ban đầu kể từ khi nó là như vậy rất lỗi thời và tôi không thể bỏ đánh dấu câu trả lời này và đánh dấu một cái mới.

Để gỡ lỗi bản đồ nguồn sử dụng ClojureScript - http://github.com/clojure/clojurescript/wiki/Source-maps

+0

nhờ chỉnh sửa của dnolen, tôi vẫn kiếm được điểm cho câu trả lời này do tai nạn lịch sử thuần túy - cổ vũ dnolen! – Hendekagon

26

CẬP NHẬT: Sử dụng trình biên dịch hiện trực tiếp là đơn giản. Nhưng lein-cljsbuild vẫn rất hữu ích.

Sử dụng lein-cljsbuild. Bạn có thể viết các bản dựng khác nhau (thử nghiệm, phát triển, phát hành). Bạn có thể tự động xem các tệp để chúng biên dịch lại nhanh chóng khi bạn thay đổi chúng. Bạn có thể dễ dàng sử dụng trình duyệt repl để đánh giá mã trực tiếp trong trình duyệt. Bạn có thể quản lý các phụ thuộc.

Cụ thể liên quan đến câu hỏi của bạn - lein-cljsbuild cũng chuyển theo mặc định cảnh báo hợp lý tới trình biên dịch để bạn nhận được cảnh báo chi tiết và chính xác trước khi bạn thực sự chạy mã trong trình duyệt.

3

Tôi đang sử dụng piggieback và kết nối brepl của tôi (trình duyệt repl) với nrepl của tôi.

Bằng cách này, bạn có thể kiểm tra mã cljs của mình trên bản sao nrepl để nhận phản hồi nhanh hơn. Bạn thậm chí có thể thực hiện một số tập lệnh cljs trong nrepl mà làm thay đổi dom. Đối với trạng thái của các biến, tôi sử dụng (js/console.log biến) như Hendekagon đã đề cập. Ngoài ra, như dnolen đã chỉ ra, nếu bạn biên dịch với chế độ gỡ lỗi (: tối ưu hóa: khoảng trắng), sau đó tạo javascript trở nên dễ hiểu hơn, vì vậy tôi làm điểm ngắt trên môi trường chrome js.

[thêm: 2013/7/18] thêm bước ngắn gọn để thiết lập nrepl-brepl

  1. tôi môi trường thiết lập brepl với sự giúp đỡ của bên dưới hướng dẫn. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    ngắn gọn, bạn sẽ cần đoạn mã dưới đâu đó trong mã clojurescript của mình.

    (repl/connect "http://localhost:9000/repl") 
    
  2. nrepl sau đó mở trong emacs (Tôi đang sử dụng Mx nrepl-jack-in)

  3. Nhập dưới đây trong nrepl bạn

    (do 
    (require 'cljs.repl.browser) 
    (cemerick.piggieback/cljs-repl 
        :repl-env 
        (doto (cljs.repl.browser/repl-env :port 9000) 
        cljs.repl/-setup))) 
    
  4. Bạn cần phải hiển thị trang đó có cljs của bạn đang chạy trên trình duyệt của bạn.

  5. kiểm tra xem nrepl của bạn có hoạt động chính xác hay không bằng cách thực hiện dưới đây trên nrepl. (js/alert "Tôi đã sẵn sàng!")

5

Gần đây (27 tháng 10 năm 2013) David Nolen phát hành một bài viết trên blog cho thấy một thiết lập tuyệt vời cho một vòng phản hồi chặt chẽ và một kinh nghiệm gỡ lỗi tốt với ClojureScript.

http://swannodette.github.io/2013/10/27/the-essence-of-clojurescript/

"bài ngắn này sẽ giúp bạn có được từ số không đến phát triển nguồn ánh xạ ClojureScript với liền recompiles trong hồ sơ lưu."

Hy vọng điều đó cũng có thể hữu ích.

4

Nếu bạn muốn sử dụng Chrome Debugger, bạn có thể sử dụng sau đây ...

(defn debugger [] 
    (js/eval "debugger")) 

(debugger) 

này là rất nhiều một hack, nhưng nó sẽ chế độ gỡ lỗi hoạt động của Chrome. Hãy nhớ rằng mặc dù, Clojure Script sử dụng không gian tên, có nghĩa là nếu bạn tạo một số biến thing, thì nó sẽ được tìm thấy trong my.namespace.thing trong bảng điều khiển chrome (như mong đợi). Lưu ý:

5

ClojureScript gỡ lỗi thực hành tốt nhất (ví dụ dự án & hướng dẫn):

https://github.com/shaunlebron/How-To-Debug-CLJS

Hệ sinh thái vẫn là thay đổi liên tục, vì vậy tôi hy vọng sẽ tiếp tục được cập nhật này với đầu vào cộng đồng để giảm bớt quá trình cho người mới đến.Nó hiện đang chạm vào bốn trong những phương pháp truyền thống của gỡ lỗi:

  • Logging - một cách dễ dàng và descriptively đăng nhập trạng thái ứng dụng của bạn
  • Testing - nhanh chóng kiểm tra mã của bạn mà không cần mở trình duyệt web
  • Tương tác - chơi với mã của bạn khi mã đang chạy trên trang web của bạn
  • Truy tìm - tạm dừng và từng bước mã
Các vấn đề liên quan