TypeScript 项目参考对 noEmit 有帮助吗?

dan*_*nvk 6 typescript visual-studio-code

我希望提高编辑器交互速度以及tsc运行 TypeScript 代码所需的时间。执行此操作的标准方法之一是使用项目参考。有许多报告表明团队通过采用这些方法获得了显着的加速。

我的代码中有一些自然中断,我可以将它们变成单独的项目:

root/
  client/
    src/
    test/
  server/
    src/
    test/
  common/
    src/
    test/
Run Code Online (Sandbox Code Playgroud)

我已经noEmit设置了tsconfig.json,因为我的工作流程通常不需要tsc发出.js.d.ts文件。例如,我使用 Webpack 构建客户端代码,并使用ts-node. 我对这两个 ( --transpileOnly) 禁用了 TypeScript 错误检查,主要检查 VS Code 中的类型错误以及作为tscgit pre-push hook 运行。

我的理解是 TypeScript 项目引用需要您发出.js文件.d.ts。规范的项目引用演示项目就是这样做的。它是否正确?tsserver如果我采用项目引用而不发出 JavaScript,VS Code(通过 )会变得更快吗?也会tsc --noEmit变得更快吗?是否有任何使用 TypeScript 项目的示例noEmit,通过采用项目引用来显着加快速度?

sta*_*all 0

\n

我的理解是 TypeScript 项目引用要求您发出 .js 和 .d.ts 文件。规范的项目引用演示项目就是这样做的。它是否正确?

\n
\n

我不认为项目引用功能需要发出 JS 文件才能工作。然而,在 3.7 版本之前,需要发出类型声明文件才能获得良好的 IDE 体验。

\n

来自TypeScript 3.7 发行说明的“使用项目引用进行无构建编辑”部分

\n
\n

TypeScript\xe2\x80\x99s 项目引用为我们提供了一种简单的方法来分解代码库,从而使我们能够更快地进行编译。不幸的是,编辑一个依赖项尚未构建(或其输出已过时)的项目意味着编辑体验将无法正常工作。

\n

在 TypeScript 3.7 中,当打开具有依赖项的项目时,TypeScript 将自动使用源.ts/.tsx文件。这意味着使用项目引用的项目现在将看到改进的编辑体验,其中语义操作是最新的并且 \xe2\x80\x9c 只是工作\xe2\x80\x9d。您可以使用编译器选项禁用此行为,disableSourceOfProjectReferenceRedirect这在处理此更改可能会影响编辑性能的大型项目时可能适用。

\n

您可以通过阅读其拉取请求来了解有关此更改的更多信息

\n
\n

在v4.0之前,. 不支持增量构建noEmit。请参阅v4.0 发行说明中有关“ --incrementalwith --noEmit的部分:

\n
\n

noEmitTypeScript 4.0 允许我们在仍然利用编译的同时使用该标志incremental。以前这是不允许的,因为incremental需要发出.tsbuildinfo文件;然而,实现更快的增量构建的用例对于所有用户来说足够重要。

\n

有关更多详细信息,您可以查看实现拉取请求

\n
\n

至于性能提升,

\n

直接来自文档

\n
\n

我们\xe2\x80\x99 还引入了一种新模式tsc,即--build标志,它与项目引用协同工作,以实现更快的 TypeScript 构建。

\n
\n

TypeScript 团队经常致力于提高性能的更改。您可以在他们的网站上查看其余的重新发布说明,并且您会经常看到有关加速的提及。例如,请参阅3.9 发行说明,其中有一整节是关于加速改进的以及v3.6 发行说明,其中有一节是关于“支持的 API --build--incremental,允许 Gulp 和 Webpack 等第三方工具利用增量构建。

\n

考虑到您正在使用 Webpack 和相关插件来进行实际构建并且您关心开发人员工具性能,请查看esbuildWebpack 的 esbuild 加载器

\n