JavaScriptプロジェクトをナビゲートする方法は?


9

現在、Backbone.jsを使用してJavaScriptプロジェクトに取り組んでいますが、メソッドとオブジェクトの定義に基づいて、ファイル間を移動するにはどうすればよいでしょうか。

例えば、私はグローバルオブジェクトの私の見解の一部への参照を保持しApp.Views、そして私は(個々の定義にナビゲートできるようにしたいと思いApp.Views.HomeApp.Views.SomePage私は1つが発生した場合など)。また、名前空間のリークを回避するために使用される多くのクロージャーがあり、これらの定義に自動的に従う方法を知りたいです。

私は見ましternたが、それを構成する方法の多くの例がないので、私は多くをすることができませんでした。

これに適したツールは何ですか?


1
「しかし、設定方法の例は多くありません...」- ternホームページの「ドキュメント」の見出しの下に、「リファレンスマニュアルは、Ternの使い方を理解するための最初のストップになるはずです。 」少なくとも彼らは正直である
itsjeyd 2014年

回答:


8

私はアジサシを絶対にお勧めします。私は途中で私のインターンシップ(Node.jsの中で働いて)昨年の夏を通してそれを発見し、それがで素晴らしい仕事をcompany-modeしてjs2-mode

js2-modeそれ自体は非常に強力です。M-.ほとんどの場合、ファイル内の通常のジャンプを処理でき、ternファイル/モジュール間ジャンプ(特にノードエコシステム)でうまく補完します。

Ternを使用する最初のステップは、バイナリをインストールすることです。私は個人的にnpmを使用しました:

$ sudo npm install -g tern

次に、Emacsにインストールします。私の関連セクションinit.elは次のとおりです。

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

最後のステップは、プロジェクトのルートディレクトリに.tern-projectファイルを設定することです。Node.jsプロジェクトの場合、これを出発点として使用します。

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

を使用する場合company-modeは、インストールcompany-ternも強くお勧めします。

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

メモとして、私はこの夏(2014年)にternサーバーがときどき死んでしまうという問題を抱えていました。次のコマンドを実行すると、一貫して修正されました。

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

原因を正確に特定することはできませんでしたが、たまにしか発生せず、迷惑でした。

参照:


これは、私が取得した構成に非常によく似ています。問題は、ほとんどの場合、定義が見つかりませんというプロンプトが表示されることです。そのため、設定に問題があるのではないかと考えました。たとえば、あるファイルとapp.eventBus = _({}).extend(Backbone.Events);別のファイルにありますapp.eventBus.trigger("changeURL","");。しかし、私はやるときtern-find-definition私の後者のためにeventBus私を得るませ定義が見つかりませんでした。私が間違っていることはありますか、それとも、ternそれがサポートするであろうと想像するような行動をサポートしていないのですか?
caisah 2014年

一部のフロントエンドフレームワークでは、問題があります。Angularの使い方を理解することはほとんど不可能でした(ただし、Angularのビットを避けて、Angularを動作させる方法を理解しようとはしませんでした)。ファイルがRequireJSスタイルの呼び出しで相互に参照していない場合は、さらに掘り下げる必要があります。誰かがそれを機能させたように見えます(?)、それを伝える十分な経験がありません。
J David Smith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.