如何在VS Code中使用全局Node包

3
如果Node.js软件包是全局安装的,它们可以被Node.js应用程序使用。但是Visual Studio Code不会接受这些包并显示错误,除非这些包在项目目录(位于子目录node_modules内)中本地安装。
例如:
import * as net from 'net';

当你没有安装 npm install --save @types/node 时,'net' 会被标记为红色下划线。如果你通过 npm -g install @types/node 全局安装该包,那么该包将可用,但是 code (V 1.17.1) 将无法识别它。
所以我的问题是,是否有一种方法可以配置 code 以识别全局安装的 Node.js 包?

有趣的问题,我无法告诉你为什么它不起作用,但我建议你运行 npm install --save-dev @types/node,这样任何其他开发人员也在项目上工作时都不需要全局安装 types/node。 - kentor
我和你一样,我把所有的包都本地安装在项目中。但有趣的是为什么代码无法识别全局安装的包。因为如果包是全局安装的,那么项目可以被执行并且它会正常工作。代码会显示一个错误,这明显是错误的指示。 - Manfred Steiner
你可以在VSCode的git仓库中创建一个问题,他们非常敏感,我敢打赌你会在那里得到答案;-)。 - kentor
现在发布在https://github.com/Microsoft/vscode/issues/36615上。 - Manfred Steiner
2个回答

4

截至VS Code 1.18版本,全局模块的IntelliSense不被支持。如果你确实需要这个功能,请提交一个针对TypeScript的新问题

然而,当在VS Code中使用JavaScript时,您实际上不需要安装@types包。 自动类型获取会启动并为您下载这些内容。您还可以通过将以下内容添加到jsconfig.json来明确强制下载这些类型:

"typeAcquisition": {
    "include": [
        "node"
    ]
}

对于TypeScript项目,您应该将@types作为开发依赖项本地安装。


你是对的,这似乎是一个 TypeScript 的问题。在 jsconfig.json 中的 typeAcquisition 并不适用于 TypeScript 级别。像 NODE_PATH 这样的环境变量或者在 tsconfig.js 中设置全局模块路径(compilerOptions/typeRoots)也会被 TypeScript 忽略。只要类型定义没有本地安装,转译就会失败。 - Manfred Steiner
为该问题创建一个新的问题 - Manfred Steiner

0

这只是一个解决方法/部分答案(我还不能评论):

只要你不想为所有脚本创建一个完整的 package.json(例如简单的独立脚本),并且它们在文件系统中有一个共同的根目录,vscode 似乎会在该根目录下识别“全局”package.json 和 node_modules 目录。

更具体地说,您可以在主目录中运行 npm i -D @types/node,然后 vscode 就能够找到所有脚本类型,这些脚本位于主目录下的某个位置(即 $HOME/**/*.ts)。

(仅在 Linux 上测试了单个文件和 vscode 1.64.1。)


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