NodeJS 如何在VS Code中配置“go to definition”来查找全局安装的npm模块?

wlsrxk51  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(125)

我正在使用VS Code开发代码,以便在Mac M1上运行Node.js。一般来说,当我在本地安装模块时,我可以使用“Go to Definition”来查找模块的定义。但是,如果我全局安装一个模块,我就不能使用“转到定义”来查找模块的定义。
我如何配置它?

rta7y2nd

rta7y2nd1#

据我所知,从阅读问题票,这是不支持的(因此不可配置)。
如果你想直接谈论VS Code,请参阅intellisense unable to detect npm global packages #113523(VS Code问题单),它被关闭为“超出范围”,另一个是No Intellisense for globally installed JavaScript modules #51639,它被关闭为TypeScript上游Suggestion: NODE_PATH support in module resolution #8760的副本(所有这些都是通过谷歌搜索“vscode intellisense for global npm”找到的)。
但是VS Code的TypeScript IntelliSense是基于tsserver(TypeScript的一部分)的,所以这才是真正应该开始对话的地方,在这种情况下,请参阅这个相关的问题:How do I tell TypeScript to use a globally installed NPM @types package?.从我的回答那里:
TypeScript本身并不支持从全局安装的NPM包中抓取类型定义。在TypeScript repo上看到这个问题:Types in globally installed packages not recognized by triple-slash directive #30523
据我所知,我们在解析类型时不会搜索全局npm安装目录。这将导致开销,并且几乎从来不是期望的行为。你应该找到一种方法来安装typings/package到你的项目本身-mjbvz(2019年3月21日)
故意不搜索全局软件包文件夹。- RyanCavanaugh(2019年3月21日)
[...]
至于如何使用tsconfig文件的paths字段来对此进行分类,我认为没有简单的方法可以稳健地做到这一点,因为(如果我理解正确的话)全局安装的软件包安装在prefix自定义点可配置的目录下,可以在多个范围(每个项目,每个用户和全局)进行配置。据我所知,tsconfig文件不支持命令替换,所以你不能做一些像$(npm config get)这样的事情来“分解”这种可配置性的复杂性。
我能想到两个原因,一个人会想要这个:

  • 方便的脚本。在这种情况下,我认为你将只需要忍受它或继续寻找其他变通方法。也许你可以把你所有的脚本放在一个文件夹里作为一个“包”(一个单独的,共享的package.json文件)
  • 节省磁盘空间:尝试使用PNPM而不是NPM。NPM已经变得更好了,但我认为在撰写本文时,PNPM在性能上仍然领先(至少在磁盘空间方面)。

相关问题