如何让 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 typescript
或npm 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 一起工作?