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

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

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

【问题讨论】:

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

标签: javascript typescript visual-studio-code


【解决方案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.jsonmost recent version,这是正确的 json,在 1.14 版中已弃用。创建为/.vscode/tasks.json

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

【讨论】:

【解决方案4】:

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

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

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

{
  "scripts": {
    "check-types": "tsc --noEmit"
  }
}
  1. 让 VSCode 知道/.vscode/tasks.json 中的运行脚本。
{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "npm",
      "script": "check-types",
      "problemMatcher": [
        "$tsc"
      ]
    }
  ]
}
  1. 要运行任务,请按 F1 键并选择“运行任务”,然后选择“npm: check-types”。

  2. 如果您在任务中添加以下行,按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 这不再有效。它会用您选择的内容替换当前项目文件...

    ===

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

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

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

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

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

    【讨论】:

    • @Francisc0 OP 没有询问是否在项目中启用类型检查。这是关于扫描整个项目,而无需打开文件。
    • 啊,是的,你是对的!我将编辑我的答案以说明这一点。我从谷歌搜索中多次找到这个线程,关于如何做我特别回答的问题。没有其他任何帮助,所以我想留下我的答案,以防其他人也需要它
    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2021-09-16
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多