Language-tools: VSCode:如果项目中存在 jsconfig.json,格式化程序会变慢或冻结

创建于 2020-11-06  ·  19评论  ·  资料来源: sveltejs/language-tools

描述错误
由于更新到 105.4.0 的 VS Code 扩展,格式化程序在保存 .svelte 文件时真的很慢或冻结,这使我几乎每次保存文件时都必须从 VS Code 提示中跳过格式化。
项目中存在jsconfig.json ,它在我的项目的根目录中映射了几个别名。

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "#js/*": ["./client_src/js/*"],    
      "#api/*": ["./server_src/api/*", "./client_src/js/api/*"],
      "#api/scripts/*": ["./server_src/scripts/api/*"],
      "#api/webapps/*": ["./server_src/webapps/api/*"],
      "#api/restapps/*": ["./server_src/restapps/api/*"],
    }
  },
  "exclude": ["node_modules"]
}

https://code.visualstudio.com/docs/languages/jsconfig

如果我删除此文件,格式化程序会按预期工作。

102.3.0版本没有这个问题,我同时降级到那个版本。

再现
在项目中添加一个jsconfig.json文件,内容似乎无关紧要。
我添加了一个空的jsconfig.json文件,或者一个空的对象,这会导致格式化程序冻结。

预期行为
格式化代码而不冻结。

截图
image

系统(请填写以下信息):

  • 操作系统:Windows 10
  • IDE:VS 代码
  • 插件/包:适用于 VSCode 102.4.0 102.5.1 的 Svelte
question

所有19条评论

您可以尝试添加包含和排除吗 (https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) 如果没有 tsconfig 或 jsconfig,我们将默认排除 node_modules 和 dist 文件。

也许#639 不知何故有不好的副作用,在这种情况下运行太频繁/花费太长时间?

你的exclude正确吗? 我在那里没有看到像dist的东西,可能是因为 #639 每次都会扫描生成文件的文件夹(如dist )并添加文件,因为它是不排除。

我将排除更改为这个,现在它似乎工作得更好,如果我重新加载编辑器,第一个格式仍然很慢,但所有后续格式现在都按预期运行(至少在过去的半小时里我一直在测试它)。
添加了 dist 以防万一,但 dist 文件夹是空的,我仍然遇到问题。

{
  "exclude": ["node_modules", "**/node_modules", "dist"]
}

这是一个相当古老的大型项目,其中 CMS 中的功能构建为完全自包含的独立模块,因此它们都有自己的 node_modules 文件夹和 package.json 来处理该模块的依赖项。
Svelte 扩展输出这个所以有几个文件😛

SnapshotManager File Statistics:
Project files: 527
Svelte files: 32
From node_modules: 1342

几个月前刚刚推出了 Svelte,到目前为止它一直运行良好。

527对我来说仍然很多。 这真的是一个很大的应用程序。

注意到报告的大多数格式化性能问题实际上不是格式化问题,而是更一般的性能问题。 只是格式化更容易发现。 我们可能仍然需要在这里和那里调整性能。

我猜这些文件大部分来自其他项目。 因为根目录下只有 jsconfig,所以即使不需要,也会加载所有内容。 我也认为我们在那里不能做太多。 初始加载很可能是 TS 服务读取配置文件,然后最初扫描和加载所有 js/ts 文件。 由于这是同步的,我们基本上无法做任何其他事情。

是的,这是一个相当大的网站,已经有几年的历史了,而且还在不断发展。
有几个独立的 Svelte 应用程序用作编辑​​器的模块。
所以大部分代码库与 Svelte 无关,但所有内容都在同一个存储库中。

排除结构中更深层次的 node_modules 文件夹似乎暂时解决了我的问题。

之前在项目中使用相同的 jsconfig 文件多年没有任何问题,最后一次编辑是在 2 年前。

如果您不需要参考此问题进行性能调整,我们可能会关闭它

我不认为这与您的问题有关,但我也遇到了一些非常糟糕的冻结滞后行为。

似乎它总是一个步骤或后面的变化或其他什么? 报告错误非常不一致。

我需要有关您的项目及其发生情况的更多信息。

  • 它发生在所有文件上还是只发生在大文件上?
  • 它有什么影响? 自动完成? 诊断? 一切?
  • 你的项目有多大?
  • 你使用像打字稿这样的预处理器吗? 如果是,是哪些?
  • 看看 output>Svelte 看看里面是否有任何可疑的东西。 每隔几分钟那里还有一个文件统计报告,你能在出现缓慢的时候粘贴在这里吗?

如果回购不是私人的,如果我能看看就好了。

我试图不必要地打开一个单独的问题,但我认为我的问题可能足够不同以至于需要一个。 我也会尝试制作一个最小的回购。 项目很小。

我也有一个非常缓慢的格式化体验,但没有 jsconfig.json。
相反,我使用带有 tsconfig.json 的打字稿。 查看 Svelte 输出显示

SnapshotManager File Statistics:
Project files: 15
Svelte files: 71
From node_modules: 473
Total: 567

我在 tsconfig 中排除了node_modules但结果是一样的,我怀疑这是性能不佳的原因。
有什么建议么? 谢谢。

格式化只是在启动时变慢还是一直很慢? 如果只是在启动时 - 我们无能为力,所有文件都会在启动时加载,这会阻止扩展一小段时间。
我需要有一个最低限度的可重复性来缩小这个问题的范围。

很难概括这个问题。 小项目似乎没有受到影响,至少没有那么大。 但我的“更大”项目的行为是这样的:
随着时间的推移,格式化会变慢。 较小的文件在 Vs Code 启动后工作就好了。 但是对于一些较大的文件(大约 15 个其他苗条组件的导入,300 LOC)格式化从一开始就很慢(大约需要 10-15 秒)并且只会变得更糟。 随着时间的推移,较小的文件似乎变慢了,但这很难重现。

我该怎么做才能为您获取更多有用的信息? 我无法将项目发送给您,因为它是客户的内部资料。

你能以某种方式匿名吗? 因此,例如删除所有内部依赖项,提取一个大组件并将其内容替换为 lorem ipsum 内容并导入其他占位符组件。 在提取过程中,您可能还会发现问题不再可重现,这有助于缩小原因。

我刚刚意识到可能是什么原因,至少对于“大”苗条组件中的持续滞后:
它是一个使用 json 文件作为测试数据的游乐场(包含约 3.500 个项目的数组)。

import testData from './testData.json';

有什么方法可以让工具忽略这些文件?

@kuechlerm您找到忽略数据导入的方法了吗?

@IgorMitev没有:(

我猜你已经在resolveJsonModule中将true tsconfig.json ? 这意味着 TS “导入并分析该文件”,这很慢且无法避免。 如果您将resolveJsonModulefalse并提供d.ts声明,该声明告诉 TS 假设任何以.json结尾的文件都可以,如下所示:

declare module "*.json" {
  const value: any;
  export default value;
}

然后文件不被分析,它应该更快。 缺点是您不再有 JSON 模块的类型定义,如果您指定的路径中没有 JSON 文件,TS 也不会出错。

@dummdidumm这是一个非常好的提示! 谢谢。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

maximedupre picture maximedupre  ·  5评论

Kingwl picture Kingwl  ·  6评论

baileyherbert picture baileyherbert  ·  3评论

JAD3N picture JAD3N  ·  5评论

scippio picture scippio  ·  3评论