Làm cách nào để điều hướng một dự án JavaScript?


9

Tôi hiện đang làm việc trên một dự án JavaScript bằng Backbone.js và tôi tự hỏi làm thế nào tôi có thể điều hướng giữa các tệp, dựa trên các định nghĩa về phương thức và đối tượng.

Ví dụ, tôi tiếp tục đề cập đến một số quan điểm của tôi trong đối tượng toàn cầu App.Views, và tôi muốn để có thể điều hướng đến mỗi định nghĩa cá nhân ( App.Views.Home, App.Views.SomePage, vv) nếu tôi gặp phải một. Ngoài ra, có rất nhiều bao đóng được sử dụng để tránh rò rỉ không gian tên và tôi muốn biết làm thế nào tôi có thể tự động làm theo các định nghĩa này.

Tôi đã thấy ternnhưng không có nhiều ví dụ về cách định cấu hình nó vì vậy tôi không thể làm được gì nhiều.

Một số công cụ tốt cho việc này là gì?


1
"... nhưng không có nhiều ví dụ về cách định cấu hình ..." - Trong tiêu đề "Tài liệu" trên terntrang chủ có ghi "Hướng dẫn tham khảo nên là điểm dừng đầu tiên của bạn để tìm ra cách sử dụng Tern. " Ít nhất là họ trung thực oO
itjeyd

Câu trả lời:


8

Tôi hoàn toàn muốn giới thiệu chim nhạn. Tôi đã phát hiện ra nó một nửa trong quá trình thực tập của tôi (làm việc trong Node.js) vào mùa hè năm ngoái và nó đã làm việc tuyệt vời với company-modejs2-mode.

js2-modebởi chính nó là khá mạnh mẽ. Nó có thể xử lý việc M-.nhảy thông thường trong một tệp hầu hết thời gian và ternbổ sung cho nó một cách độc đáo với nhảy liên tệp / mô-đun (đặc biệt là trong hệ sinh thái nút).

Bước đầu tiên để sử dụng tern là cài đặt nhị phân. Cá nhân tôi đã sử dụng npm để làm như vậy:

$ sudo npm install -g tern

Sau đó cài đặt trong Emacs. Phần có liên quan từ tôi init.ellà:

;;; tern
(package-require 'tern)
(add-hook 'js2-mode-hook (lambda () (tern-mode t)))

Bước cuối cùng là thiết lập một .tern-projecttệp trong thư mục gốc của dự án của bạn . Đối với các dự án Node.js, tôi sử dụng điều này như một điểm khởi đầu:

{
    "loadEagerly": [
        "src/**.js"
    ],
    "plugins": {
        "node": {
        }
    }
}

Nếu bạn sử dụng company-mode, sau đó cài đặt company-terncũng rất khuyến khích:

(package-require 'company-tern)
(eval-after-load 'company
    '(add-to-list 'company-backends 'company-tern))

Một lưu ý, tôi đã gặp một số rắc rối với máy chủ chim nhạn thỉnh thoảng chết trong mùa hè vừa qua (2014). Chạy sau đây cố định nó một cách nhất quán:

M-: (delete-process "Tern") RET

Tôi đã không thể tìm ra chính xác những gì gây ra nó, nhưng nó xảy ra không thường xuyên đến mức ít hơn một sự phiền toái.

Người giới thiệu:


Cái này trông khá giống cấu hình tôi có. Vấn đề là tôi hầu như luôn được nhắc mà không tìm thấy định nghĩa . Đó là lý do tại sao tôi nghĩ rằng có thể có điều gì đó sai với cấu hình của tôi. Ví dụ, trong một tập tin tôi có app.eventBus = _({}).extend(Backbone.Events);và trong một tập tin khác tôi có app.eventBus.trigger("changeURL","");. Nhưng khi tôi làm tern-find-definitionsau này eventBustôi không tìm thấy định nghĩa . Có điều gì đó tôi làm sai, hoặc chỉ là ternkhông hỗ trợ loại hành vi mà tôi tưởng tượng nó sẽ hỗ trợ?
caisah

Với một số khung frontend nó có vấn đề. Hầu như luôn luôn không thể biết phải làm gì với Angular (mặc dù tôi đã tránh các bit Angular và không cố gắng tìm ra cách làm cho nó hoạt động với chúng). Nếu các tệp không tham chiếu lẫn nhau thông qua các cuộc gọi theo kiểu RequireJS thì bạn sẽ phải đào thêm. Có vẻ như ai đó đã làm cho nó hoạt động (?) Nhưng tôi không có đủ kinh nghiệm với điều đó để nói.
J David Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.