【问题标题】:How to use global Node packages with VS Code如何在 VS Code 中使用全局 Node 包
【发布时间】:2017-10-16 03:17:45
【问题描述】:

如果 Node.js 包是全局安装的,它们可以被 Node.js 应用程序使用。但是 Visual Studio Code 不会接受这些包并指示错误,只要这些包没有安装在项目目录本地(在子目录 node_modules 内)。

例如:

import * as net from 'net';

...'net' 只要不安装npm install --save @types/node,就会用红色下划线标记。如果您通过npm -g install @types/node 全局安装该软件包,该软件包将可用,但代码 (V 1.17.1) 将无法识别它。

所以我的问题是,有没有办法配置代码来识别全局安装的 Node.js 包?

【问题讨论】:

  • 有趣的问题,我无法告诉你为什么它不起作用,但我建议你运行npm install --save-dev @types/node,这样任何其他正在从事该项目的开发人员就不需要拥有全局安装的类型/节点。
  • 我做的和你一样,我把所有的包都安装在本地项目里面。但有趣的是为什么代码不能识别全局安装的包。因为如果包是全局安装的,项目就可以执行,它会工作。代码会提示错误,这肯定是错误提示。
  • 你可以在 VSCode 的 git repo 中创建一个问题,它们反应迅速,我敢打赌你会在那里得到答案 ;-)。

标签: node.js npm visual-studio-code


【解决方案1】:

从 VS Code 1.18 开始不支持全局模块的 IntelliSense。如果您确实需要此功能,请提交新问题against TypeScript

但是,在 VS Code 中使用 JavaScript 时,您确实不需要安装 @types 包。 Automatic types acquisition 应该启动并为您下载这些。通过将以下内容添加到您的jsconfig.json

,还可以明确强制下载这些类型
"typeAcquisition": {
    "include": [
        "node"
    ]
}

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

【讨论】:

  • 你是对的,这似乎是一个打字稿问题。 jsconfig.json 中的 typeAcquisition 在 typescript 级别上不起作用。 typescript 也会忽略 NODE_PATH 等环境变量或 tsconfig.js (compilerOptions/typeRoots) 中的全局模块路径设置。只要没有在本地安装类型定义,编译就会失败。
  • 为该问题创建一个新的question
【解决方案2】:

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

只要您不想为其创建完整 package.json 的所有脚本(例如简单的独立脚本)在文件系统中都有一个公共根目录,vscode 似乎就可以识别“全局” package.json和该根目录下的 node_modules 目录。

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

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

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 2017-12-18
    • 1970-01-01
    • 2016-05-25
    • 2021-09-06
    • 2022-01-19
    • 2023-03-20
    • 2023-03-02
    相关资源
    最近更新 更多