Wie navigiere ich in einem JavaScript-Projekt?

9

Ich arbeite derzeit an einem JavaScript-Projekt mit Backbone.js und frage mich, wie ich basierend auf Methoden- und Objektdefinitionen zwischen Dateien navigieren kann.

Zum Beispiel, halte ich Verweise auf einige meiner Ansichten in das globale Objekt App.Views, und ich möchte jeden einzelnen Definition navigieren können ( App.Views.Home, App.Views.SomePageusw.) , wenn ich eine Begegnung. Außerdem werden viele Verschlüsse verwendet, um das Auslaufen von Namespaces zu vermeiden, und ich möchte wissen, wie ich diesen Definitionen automatisch folgen kann.

Ich habe gesehen, ternaber es gibt nicht viele Beispiele für die Konfiguration, so dass ich nicht viel tun konnte.

Was sind einige gute Werkzeuge dafür?

Caisah
quelle
1
"... aber es gibt nicht viele Beispiele für die Konfiguration ..." - Unter der Überschrift "Dokumentation" auf der ternStartseite steht "Das Referenzhandbuch sollte Ihre erste Anlaufstelle sein, um herauszufinden, wie Sie Tern verwenden. "" Zumindest sind sie ehrlich oO
itsjeyd

Antworten:

8

Ich würde Seeschwalbe auf jeden Fall empfehlen. Ich habe es in der Mitte meines Praktikums (bei Node.js) im letzten Sommer entdeckt und es hat wunderbar mit company-modeund funktioniert js2-mode.

js2-modean sich ist ziemlich mächtig. Es kann das übliche M-.Springen innerhalb einer Datei die meiste Zeit verarbeiten und ternergänzt es gut durch das Springen zwischen Dateien / Modulen (insbesondere im Knoten-Ökosystem).

Der erste Schritt zur Verwendung von tern ist die Installation der Binärdatei. Ich persönlich habe npm verwendet, um dies zu tun:

$ sudo npm install -g tern

Dann in Emacs installieren. Der relevante Abschnitt von mir init.elist:

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

Der letzte Schritt besteht darin, eine .tern-projectDatei im Stammverzeichnis Ihres Projekts einzurichten . Für Node.js-Projekte verwende ich dies als Ausgangspunkt:

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

Wenn Sie verwenden company-mode, wird die Installation company-ternebenfalls dringend empfohlen:

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

Als Hinweis hatte ich einige Probleme mit dem Seeschwalbenserver, der im vergangenen Sommer (2014) gelegentlich starb. Das Ausführen der folgenden Fehler wurde konsistent behoben:

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

Ich konnte nicht genau herausfinden, was es verursachte, aber es passierte selten genug, um kaum mehr als ein Ärgernis zu sein.

Verweise:

J David Smith
quelle
Das sieht ziemlich nach der Konfiguration aus, die ich bekommen habe. Die Sache ist, dass ich fast immer aufgefordert werde, keine Definition zu finden . Aus diesem Grund dachte ich, dass möglicherweise etwas mit meiner Konfiguration nicht stimmt. Zum Beispiel in einer Datei, die ich habe, app.eventBus = _({}).extend(Backbone.Events);und in einer anderen, die ich habe app.eventBus.trigger("changeURL","");. Aber wenn ich tern-find-definitionfür letzteres mache eventBus, wird keine Definition gefunden . Gibt es etwas, das ich falsch mache, oder unterstützt es einfach ternnicht das Verhalten, von dem ich mir vorstelle, dass es es unterstützen würde?
Caisah
Bei einigen Frontend-Frameworks gibt es Probleme. Es war fast immer nicht in der Lage herauszufinden, was mit Angular zu tun ist (obwohl ich die Angular-Bits vermieden und nicht versucht habe, herauszufinden, wie es mit ihnen funktioniert). Wenn die Dateien nicht über Aufrufe im RequireJS-Stil aufeinander verweisen, müssen Sie mehr graben. Es sieht so aus, als hätte jemand es zum Laufen gebracht (?), Aber ich habe nicht genug Erfahrung damit, um es zu sagen.
J David Smith