如何让 Visual Studio Code 检查整个项目的错误?

Posted

技术标签:

【中文标题】如何让 Visual Studio Code 检查整个项目的错误?【英文标题】:How to make Visual Studio Code check entire project for errors? 【发布时间】:2017-06-01 20:26:04 【问题描述】:

我正在使用 VS Code 进行 TypeScript/javascript 开发。当我打开一个文件时,它会检查该文件是否有错误。问题是如果我正在重构(比如我将一些共享代码移动到新位置或更改名称),它不会向我显示由此引起的错误,直到我打开有问题的文件。 ...因此,如果我想进行广泛的重构,我必须打开每个文件以使其扫描文件以查找错误。

如何让 VS Code 扫描整个项目的错误,而无需手动一个一个地打开每个文件?

【问题讨论】:

想知道为什么它被标记为关闭。似乎是一个至少有一个答案的直接问题。如果不合适,我想了解原因,以便纠正我的行为。 所有答案似乎都在执行 Typescript 检查,如果我错了,请纠正我?我想完全按照标题的要求做,浏览项目中的所有源文件以寻找“问题” - 显示在面板中的终端等。这些问题取决于安装的扩展。 我认为您必须根据您的情况选择合适的问题匹配器。对于我的情况,任何会出现在“问题”面板中的问题都可以通过这种方法识别(它们确实会显示在该面板中)。 【参考方案1】:

VS Code (v1.44) 有一个实验性 功能,允许project wide error reporting 在 TS 中使用。试试看:

// put this line in settings.json
"typescript.tsserver.experimental.enableProjectDiagnostics": true

【讨论】:

激活它并杀死你的 RAM 这当然取决于项目规模、使用的扩展和其他变量。对于一个中小型项目,我刚刚测量了大约 400-500 MB 额外的 RAM 使用量(包括 TS ESLint + 拼写检查错误),在第一次加载后。这有点可忽略——尽管我还没有测试过大项目。还要确保您不包含node_modules 错误报告,这可能会对性能产生巨大影响。 简直完美! @ford04 你是如何排除 node_modules 的?根据this,目前没有已知的方法。 目前(Windows 10,VSCode 1.52.1)太随意了。问题通过魔法出现和消失。光标在闪烁。等等。我建议使用 Linter(例如 TSLint 或 ESLint)来扫描所有文件。例如,在提交之前自动(git hook 或自定义)。【参考方案2】:

想通了。请注意,此答案特定于我正在使用的 TypeScript。这里是:

确保 typescript 已全局安装(显然我只是在本地安装了我的): npm install -g typescript

然后在 VS Code 中按 Shift+Ctrl+B。如果您没有设置任务运行器,它会询问您想要什么。我选择了 typescript,tasks.json 文件将如下所示:


    "version": "0.1.0",
    "command": "tsc",
    "isShellCommand": true,
    "args": ["-p", "."],
    "showOutput": "silent",
    "problemMatcher": "$tsc"

然后按 Shift+Ctrl+B(或 Shift+Command +B in macOS)将检查整个项目是否存在问题,并将在您的“问题”面板中报告。

【讨论】:

无需全局安装 TypeScript。请改用项目中包含的那个。只需将命令设置为“node”,将 args 设置为 ["./node_modules/typescript/bin/tsc", "-p", "."]。 这会编译你所有的源代码并生成 .js 文件,请谨慎使用或查看下面更好的示例 我在哪里添加这个文件?我在 macOS 中按 Shift+Command+B 却没有提示【参考方案3】:

对于 tasks.json 的 most recent version,这是正确的 json,在 1.14 版中已弃用。创建为/.vscode/tasks.json


    "version": "2.0.0",
    "command": "tsc",
    "type": "shell",
    "args": [
        "-p",
        "."
    ],
    "presentation": 
        "reveal": "silent"
    ,
    "problemMatcher": "$tsc"

【讨论】:

我不熟悉tasks.json,如何调用它? @devrobf "按下 Ctrl+Shift+B 或从全局终端菜单运行 Run Build Task 会显示以下选择器:" code.visualstudio.com/docs/editor/tasks【参考方案4】:

如果您不想全局安装 TypeScript,可以执行以下操作:

    在项目本地安装TypeScript,即yarn add --dev typescriptnpm install --save-dev typescript

    将检查类型运行脚本添加到./package.json--noEmit 表示编译器不会生成任何 JavaScript 文件。


  "scripts": 
    "check-types": "tsc --noEmit"
  

    让 VSCode 知道/.vscode/tasks.json 中的运行脚本。

  "version": "2.0.0",
  "tasks": [
    
      "type": "npm",
      "script": "check-types",
      "problemMatcher": [
        "$tsc"
      ]
    
  ]

    要运行任务,请按 F1 键并选择“运行任务”,然后选择“npm: check-types”。

    如果您在任务中添加以下行,按Ctrl+B 将运行它。

    “组”: “种类”:“构建”, “isDefault”:真

【讨论】:

设置在哪里? 当我这样做时,我从 node_modules 中的文件中得到类型错误:( 您可以指定要包含在您的tsconfig.json 文件@Sammi 中的文件 要在手表模式下使用它,请参阅medium.com/@thiagodebastos/…【参考方案5】:

在 vs code 中打开项目后,打开 vs code 终端并运行:

node_modules/.bin/tsc --noEmit

【讨论】:

太棒了!正是我需要的!这应该是公认的答案。 顺便说一句,使用--skipLibCheck 编译器选项会更好,因为没有它可能会导致依赖项报告很多错误,这通常是不受欢迎的【参考方案6】:

更新。 我在下面的回答没有回答最初的问题,但是如果你和我一样并且发现这个线程正在搜索如何在 VSCode 中打开 // @ts-check 项目范围,这样你就不需要添加 // @ts-check 到每个文件然后我的答案就是你需要的。我已经搜索和搜索并一直将此线程作为我的最佳结果,因此希望这对其他人也有帮助


我使用的是 1.52.1 版本的 vscode,答案非常简单直接在 vscode 网站上:

https://code.visualstudio.com/docs/nodejs/working-with-javascript#_type-checking-javascript

向下滚动到“使用 jsconfig 或 tsconfig”部分

在你的项目根目录中添加一个 jsconfig.json 并添加"checkJs": true


  "compilerOptions": 
    "checkJs": true
  ,
  "exclude": ["node_modules", "**/node_modules/*"]

添加后可能需要重启 vscode

【讨论】:

【参考方案7】:

编辑:自从更新到 1.52.0 这不再有效。它会用您选择的内容替换当前项目文件...

===

我已经尝试了所有我能找到的解决方案,我认为可以肯定地说答案是:你不能*

我发现的最好的技术仍然是手动打开每个文件,但至少不是一个接一个:

    您不能拖放目录,但可以选择多个文件(包括目录)并拖放。目录将被忽略,您选择的所有文件都将在选项卡中打开。 接下来,您需要赋予每个选项卡焦点,以便触发 eslint 运行。 (按住下一个标签键盘快捷键有效。)

这太糟糕了,我请求有人证明我错了。

*我还没有找到一种可以像手动打开文件一样有效的方法。每种方法——实验性 vscode 功能和 tsc 任务——都有其自身的缺点。 vscode 功能显然是解决方案,但without a way to ignore node_modules, etc. 使用起来太痛苦了。

【讨论】:

@Francisc0 OP 没有询问是否在项目中启用类型检查。这是关于扫描整个项目,而无需打开文件。 啊,是的,你是对的!我将编辑我的答案以说明这一点。我从谷歌搜索中多次找到这个线程,关于如何做我特别回答的问题。没有其他任何帮助,所以我想留下我的答案,以防其他人也需要它

以上是关于如何让 Visual Studio Code 检查整个项目的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Windows 中的 Visual Studio Code 针对 WSL 区分大小写?

更新依赖项后,如何让 Visual Studio Code IDE 更新类型?

如何让 OpenGL 在 Windows 上与 Visual Studio Code 一起工作?

Visual Studio Code 未在 Javascript 中执行错误检查

如何打开多个 Visual Studio Code 实例?

甜点视频- Visual Studio Code 小技巧 TS编译器检查JS文件