Подтвердить что ты не робот

Запросить навигацию по кодам js

require.js указывает способ определения объектов внутри модулей с define([requiremens], object) как лучший способ.

Таким образом, каждая страница или другой файл js будут выполнять require() вызовы и принимать модули в качестве параметров.

Это работает очень хорошо, каждая функция/модуль имеет собственное пространство имен.

Проблема в том, что у меня есть:

// AJAX/Requests.js

define(['UI/Message'],function(Message){
var Requests={
    checkResponse:function(response){
        //1==ok
        //0==error
        //2==good message
        //3==good message, but still stop
        if(response.status==1){
            return true;
        }
        else if(response.status==2){
            Message.good(response.message);
            return true;
        }
        else if(response.status==3){
            Message.good(response.message);
            return false;
        }
        else{
            Message.bad(response.message);
            return false;
        }
    }
};
return Requests;
});

Теперь UI/Message определяется таким же образом и возвращает объект.

Но когда я редактирую файл с запросами, я не могу перемещаться по коду, поэтому, если я хочу редактировать объект Message, единственный способ - открыть и открыть файл сам и найти нужную мне функцию, а не IDE прыгнет туда для меня.

Есть ли способ обхода для pycharm конкретно или для require.js, чтобы решить эту проблему? Когда у вас много кода, это становится бесполезным для навигации по нему, поэтому я использую IDE в первую очередь!

И что еще хуже: редактор никогда не знает, какие функции имеют объекты!

Единственное возможное решение, которое я вижу, заключается в том, чтобы не использовать замкнутые пространства имен и объявлять глобальную переменную перед вызовом define(), но в этом случае все объекты должны называться как UI_Message, AJAX_Requests. Чтобы быть уверенным, что у меня нет сообщения в двух разных местах....

И я не уверен, если оптимизатор require.js будет использовать это правильно. Документация Require.js очень ясна, чтобы держаться подальше от глобальных переменных.

4b9b3361

Ответ 1

Это известная проблема, пожалуйста, запустите/проголосовате.

Из описания проблемы:

Библиотека dojo перешла на формат AMD define() для загрузки модулей вместо dojo.require(). Раньше я мог использовать Ctrl + B на dojo.require('path.to.someJs'), чтобы перейти к объявлению. Это делает не работают в новом формате define (['путь/to/someJs]',...).

Поскольку PyCharm, WebStorm, PhpStorm и IntelliJ IDEA используют один и тот же модуль JavaScript, эта проблема также относится к продукту, который вы используете. Вы будете продолжать наблюдать описанную проблему, пока эта ошибка не будет исправлена. Извините за неудобства.

Ответ 2

WebStorm (не менее 6.0.2) поддерживает навигацию кода с помощью RequireJs, если вы определяете свои модули с помощью обертки CommonJs и используете экспорт и аргументы модуля:

//foo.js
define(function(require, exports, module) {
    //use exports to expose properties for code navigation in other modules
    exports.bar = function() {}
});

По-видимому, он работает, даже если модуль, использующий его, не использует формат оболочки CommonJs:

define(['./foo'], function(foo) {
    foo.bar(); //code navigation works here
}

Если другие IDE используют один и тот же плагин JavaScript, как сказал CrazyCoder, он может работать и с их новыми версиями.