Require js 损坏了代码导航。

19

require.js指定了使用 define([requirements], 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/消息是以相同的方式定义并返回对象。
但是,当我使用requests编辑文件时,我无法通过代码导航,所以如果我想编辑Message对象,唯一的方法是自己打开文件并找到需要的函数,而不是让IDE为我跳转到那里。
有没有适用于Pycharm特定或常见的require.js的解决方法来解决这个问题?当你有很多代码时,导航它变得混乱不堪,这就是我首先使用IDE的原因!
更糟糕的是:编辑器永远不知道函数对象具有什么功能!
我能看到的一个可能的解决方案是不使用封闭的名称空间,并在`define()`调用之前声明全局变量,但在这种情况下,所有对象都应该像UI_Message, AJAX_Requests这样被调用。为了确保我没有将某些消息放在两个不同的位置...
而且我不确定require.js优化器是否会正确使用它。Require.js文档非常清楚地指出,要远离全局变量。

这个问题解决了吗? - blogbydev
2个回答

8

这是一个已知问题,请点赞/投票。

根据问题描述:

Dojo库切换到了使用AMD格式的define()来加载模块,而不是dojo.require()。之前,我可以使用Ctrl+B在dojo.require('path.to.someJs')上跳转到声明。但在新格式define(['path/to/someJs]', ...)上无法正常工作。

由于PyCharm、WebStorm、PhpStorm和IntelliJ IDEA共用同一个JavaScript插件,因此此问题也适用于您正在使用的产品。在修复此错误之前,您将继续遇到上述问题。对此给您带来的不便深感抱歉。


3
JetBrains已经在这个问题上实现了基础功能,但是他们仍然不支持路径配置(你只能使用相对路径),而且你必须点击定义本身才能进入模块。 :( - B Robster
在WebStorm 8中有所改进。要求的功能“查找用法”和“转到声明”现在已经可以使用,重构仍需要一些改进。 - Ferdinand Prantl

3
WebStorm(至少6.0.2版本)支持使用RequireJs进行代码导航,如果您使用CommonJs wrapper定义模块并使用exports和module参数。
//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使用与CrazyCoder所说相同的JavaScript插件,则它可能也适用于它们的更新版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接