从Eclipse迁移到VSCode,在工作空间中开放实现/引用的替代方案是什么?



我将只开始用Javascript开发,因为Eclipse的js支持不如java的好,我做了一些搜索,发现VSCode似乎是当今Javascript开发的前沿。所以,我从Eclipse迁移到VSCode,从来没有那么喜欢Eclipse,但我只是更有效地使用这两个命令/热键。所以我给那些不熟悉的人举个例子:

foo.js

var foo = {
     doSomething: function(){
        console.log("hello world");
    }
}
module.exports = foo;

bar.js

var foo = require('./foo')
foo.doSomething();

假设这是在Eclipse中,它是Java而不是Javascript:所以如果我在看bar.js,我想知道doSomething()是要做什么,我会按下F3(开放实现)在doSomething上,它会直接到它在foo.js上的实现。

另一个命令,工作区中的引用将是另一种方式,如果我在foo.js,我想知道在什么地方doSomething()被调用,我会按Ctrl+Shift+G,在一个小窗口中,它会显示bar.js上的确切行(以及使用它的任何其他文件)。此外,值得注意的是,这不仅仅是一个简单的搜索,它不会显示任何正在调用doSomething的文件,而不是在foo.js中声明的doSomething。

我注意到在VSCode中有一个查找所有引用,但它只适用于同一个文件。还有一个Go To Declaration命令,它实际上很有用,但它只适用于同一个文件。如果我在bar.js上,我可以在foo. dosomething()上选择foo,使用Go To Declaration,它会把我送到require语句。这对大文件很有用,但在一天结束的时候,我仍然停留在require语句上,我无法快速导航到它的module.exports.

所以是的,我知道在javascript中实现这些比在java中更难,因为类/类型结构和其他一切。但这些是我的问题:

  • 是否有一种方法来实现我想要的VSCode原生?也许我忽略了什么命令?

  • 是否有任何扩展能够实现这一点。我记得前一段时间尝试过一个扩展,但它并没有很好地工作(它曾经失败/崩溃)。也许在TypeScript/ES6中,扩展会更容易工作?

  • 如果没有确切的替代方案,你会怎么处理这些问题?如何快速访问另一个文件中的函数声明?请记住,所需的文件也可以是node_modules上的一个库。你如何找到所有的地方,一个特定的函数被调用,记住可能有许多其他的函数与相同的名称和许多文件在你的项目。

要启用跨文件的这种支持,您需要创建一个jsconfig。json文件。

引用文档:

JavaScript智能感知将立即为单个文件工作。如果你使用Node.js使用的CommonJS模块系统,那么你得到智能感知你的模块。

还有两个步骤可以配置智能感知工作空间和外部模块中的文件:

创建jsconfig。json文件来指示JavaScript项目。安装TypeScript用于外部库的定义文件(类型)。

文档中有关于不同设置的更多信息,但是只要在项目根目录中创建一个名为jsconfig.json的文件就足够了:

{
    "compilerOptions": {
        "target": "ES6"
    },
    "exclude": [
        "node_modules"
    ]
}

如果你想了解更多关于vscode使用的javascript语言服务的工作原理,你可以查看Salsa文档

是否有一种方法来实现我想要的VSCode原生?也许有什么命令我忽略了吗?

是的,我认为你想要的是内置的。尝试按F12(去定义)与光标在您正在寻找的符号…有时我必须按两次它在TypeScript中import编辑的东西,但它对我来说很好。

这似乎不需要一个jsconfig.json,它为我工作,只有你在其他空目录中提到的两个文件。但是我可以想象,配置文件中不正确的设置可能会阻止它。

您可以使用Preferences: Open Keyboard Shortcuts命令更改键绑定。不幸的是,我认为(目前)还没有一个用于模拟其他ide的键绑定库。

最新更新