当使用运行时函数和值派生解析路径时,如何在 VS Code 中对 CommonJS `require` 使用“转到定义”?

问题描述 投票:0回答:1

我希望能够使用 VS Code 中的 转到定义功能来获取路径,例如:

const path = require('path');
const mypath = require(path.resolve('my', 'path'));

如何配置 VS Code 来识别这些路径?

这是我正在谈论的一个例子:

我希望能够对上面示例代码中的

mypath
变量使用“转到定义”操作。

node.js visual-studio-code intellisense commonjs go-to-definition
1个回答
0
投票

VS Code 和 TypeScript 不会努力弄清楚从运行时函数(如

path.resolve
)的输出返回的内容是否在静态/“编译”时可知。只需切换为使用
require("my/path")
而不是
require(path.resolve("my", "path"))
。无论如何,我看不出这样做的理由——如果您认为在使用
require
时需要处理 Windows 的不同路径分隔符,那么您不需要这样做,因为 NodeJS 的
require
解析了 POSIX 风格独立于操作系统的路径(
require
的路径参数中的 POSIX 路径将适用于 Windows 上的 NodeJS)。直接来自文档

POSIX 风格的相对路径以独立于操作系统的方式解析,这意味着上面的示例在 Windows 上的工作方式与在 Unix 系统上的工作方式相同。

如果您实际上将

path.resolve
与在运行时派生的更复杂的输入一起使用,并且不可能静态派生,那么根据定义,IntelliSense 不可能为您提供这样的设施,因为 IntelliSense 通常基于静态分析.

如果它是静态可推导的,并且您想要获得这样的功能,则不需要在 VS Code 中配置某些内容来实现它。这取决于 tsserver 是否支持它。如果没有(当前您提供的示例就是这种情况),那么您获得它的唯一方法是首先向 TypeScript 维护者提出功能请求问题单来请求此类功能。

© www.soinside.com 2019 - 2024. All rights reserved.