Bagaimana cara menavigasi proyek JavaScript?

9

Saat ini saya sedang mengerjakan proyek JavaScript menggunakan Backbone.js dan saya bertanya-tanya bagaimana saya bisa menavigasi antar file, berdasarkan pada metode dan definisi objek.

Sebagai contoh, saya tetap referensi ke beberapa pandangan saya di obyek global App.Views, dan saya ingin dapat menavigasi ke setiap definisi individu ( App.Views.Home, App.Views.SomePage, dll) jika menemukan satu. Juga, ada banyak penutupan yang digunakan untuk menghindari kebocoran namespace, dan saya ingin tahu bagaimana saya bisa secara otomatis mengikuti definisi ini.

Saya telah melihat terntetapi tidak banyak contoh tentang cara mengkonfigurasinya jadi saya belum bisa berbuat banyak.

Apa sajakah alat yang bagus untuk ini?

caisah
sumber
1
"... tetapi tidak ada banyak contoh tentang cara mengkonfigurasinya ..." - Di bawah tajuk "Dokumentasi" di ternhalaman beranda tertulis "Manual referensi harus menjadi perhentian pertama Anda untuk mencari tahu bagaimana cara menggunakan Tern. " Setidaknya mereka oO jujur
itsjeyd

Jawaban:

8

Saya benar-benar akan merekomendasikan barang. Saya menemukannya di pertengahan magang saya (bekerja di Node.js) musim panas lalu, dan itu bekerja dengan sangat baik dengan company-modedan js2-mode.

js2-modedengan sendirinya cukup kuat. Ia dapat menangani M-.lompatan yang biasa dalam suatu file sebagian besar waktu, dan ternmelengkapinya dengan baik dengan lompatan antar-file / modul (khususnya dalam ekosistem node).

Langkah pertama untuk menggunakan tern adalah menginstal biner. Saya pribadi menggunakan npm untuk melakukannya:

$ sudo npm install -g tern

Kemudian instal di Emacs. Bagian yang relevan dari saya init.eladalah:

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

Langkah terakhir adalah mengatur .tern-projectfile di direktori root proyek Anda . Untuk proyek Node.js, saya menggunakan ini sebagai titik awal:

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

Jika Anda menggunakan company-mode, maka instal company-ternjuga sangat dianjurkan:

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

Sebagai catatan, saya memang memiliki beberapa masalah dengan server tiga kali sekarat musim panas lalu (2014). Menjalankan yang berikut memperbaikinya secara konsisten:

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

Saya tidak dapat menemukan dengan tepat apa yang menyebabkannya, tetapi itu jarang terjadi sehingga tidak lebih dari gangguan.

Referensi:

J David Smith
sumber
Ini terlihat seperti konfigurasi yang saya dapatkan. Masalahnya adalah saya hampir selalu diminta dengan Tidak ada definisi yang ditemukan . Itu sebabnya saya pikir mungkin ada sesuatu yang salah dengan konfigurasi saya. Misalnya, dalam satu file yang saya miliki app.eventBus = _({}).extend(Backbone.Events);dan yang lain saya miliki app.eventBus.trigger("changeURL","");. Tetapi ketika saya lakukan tern-find-definitionuntuk yang terakhir saya, eventBussaya mendapatkan Tidak ditemukan definisi . Apakah ada sesuatu yang saya lakukan salah, atau hanya terntidak mendukung jenis perilaku yang saya bayangkan akan mendukungnya?
caisah
Dengan beberapa kerangka kerja frontend memiliki masalah. Hampir selalu tidak dapat menemukan apa yang harus dilakukan dengan Angular (walaupun saya menghindari bit Angular dan tidak mencoba mencari cara untuk membuatnya bekerja dengan mereka). Jika file tidak saling mereferensikan melalui panggilan gaya RequireJS maka Anda harus melakukan lebih banyak penggalian. Sepertinya seseorang membuatnya bekerja (?) Tapi saya tidak punya cukup pengalaman untuk mengatakannya.
J David Smith