在软件开发世界中,基于打字稿的MonorePo项目越来越受欢迎。但是,它们带来了一系列独特的挑战,最值得注意的是开发过程中打字稿汇编的耗时的过程。
在Contember,我们正面临着这一挑战。我们的解决方案是Typescript Execute Tool(tsx
)和Node.js的--conditions
选项的组合。这种方法使我们可以直接在node.js中运行打字稿源,从而通过消除连续重新编译的需求来显着加速开发过程。
在本文中,我们将为您介绍如何实施这种有效的策略,从而提高了MonorePo环境中打字稿开发的速度和整体质量。让我们潜入!
问题
monorepos
monorepos或单片存储库,是代码库管理策略,其中许多项目或软件包的代码存储在同一存储库中。这种结构可以带来许多优势,例如简化的依赖管理,跨项目的代码共享以及统一版本控制。但是,在MonorePo中使用Typescript时,连续编译过程可以减慢开发工作流程。
打字稿
打字稿是JavaScript的静态超集,可通过类型安全和其他现代功能增强语言。虽然Typescript带来了许多优点,但它为工作流程添加了一个额外的步骤:必须将其编译到JavaScript中,然后才能在Node.js中运行。
。在一个大型项目或具有多个相互依赖软件包的monorepo中,等待打字稿汇编可以成为开发过程中的重要瓶颈。要简化此工作流程,我们需要一种直接在Node.js中运行打字条源代码的方法,而无需中间编译步骤。
工具
TSX
TypeScript Execute (tsx)是一个强大的命令行工具,可增强Node.js直接运行TypeScript和ESM文件。它利用esbuild
编译器提供了一个疯狂的快速按需打字稿和ESM编译。
要将tsx
添加到您的项目中,请将其安装为DEV依赖性:
yarn add --dev tsx
TSX旨在替换node
命令在commonjs
和module
软件包类型中替换为运行TypeScript和ESM。例如,要运行打字稿文件,您只需使用命令tsx ./file.ts
。
node.js的--conditions
选项
koude1 option是node.js中的一个功能,它允许您指定解决导出的自定义条件。它与包装的package.json
文件中的"exports"字段一起使用,可控制模块导出如何根据某些条件解决。
例如,通过定义package.json
文件中的条件导出,您可以根据使用是使用commonjs还是使用ESM语法导入的软件包的不同输入点,或者是在development
还是production
环境中运行的。
通过使用--conditions
标志运行node.js程序,例如node --conditions=development app.js
,您可以为模块导出启用自定义分辨率条件。
组合,这两个工具可以通过允许您直接在node.js中运行Typescript源代码来显着改善您的工作流程,从而绕过连续的Tyspercript编译的需求。让我们继续探索如何实施此策略。
解决方案
在您的MonorePo中配置有条件出口
第一步是为monorepo中的每个软件包中的package.json
文件中设置有条件的导出。此配置指定了Node.js应根据给定条件使用的入口点。出于我们的目的,我们将创建一个指向打字稿源文件的“打字稿”条件。您还应该用编译源定义默认导出:
{
"exports": {
"typescript": "./src/index.ts",
"default": "./dist/src/index.js"
}
}
在此设置中,Node.js将在typescript
条件处于活动状态时直接导入Typescript源文件。在其他情况下,将默认用于从dist
目录导入所编译的JavaScript文件。
直接使用tsx
和conditions
运行打字稿
设置了有条件的导出后,您可以将tsx
工具与--conditions=typescript
选项一起使用,直接在Node.js中运行您的打字稿源代码:
yarn tsx --conditions=typescript ./src/run.ts
此命令激活typescript
条件。结果,当Node.js从MonorePo中的软件包中解析导入时,它使用“ TypeScript”条件导出指定的打字稿源文件。这消除了连续的打字稿汇编的需求,使得更流畅,更快的开发周期。
就是这样!现在,您已经配置了基于打字稿的MonorePo,以直接在Node.js中运行Typescript源代码。在下一部分中,我们将讨论一些解决方案有益的实际示例。
奖金:用TSX观看模式
在您的打字稿MonorePo中使用TSX是其手表模式功能。这样,TSX不仅允许您直接在node.js中执行打字稿源代码,而且还可以注意打字稿文件中的更改,并在检测到修改时自动重新启动应用程序。
这在项目的开发阶段特别有用,在您的项目的开发阶段,更改是频繁的,实时反馈对于平稳有效的工作流程至关重要。
您可以通过运行以下命令来激活手表模式:
tsx watch --conditions=typescript ./file.ts
使用此命令,TSX将监视./file.ts
及其依赖项。当其中任何一个变化时,TSX将使用typescript
条件重新运行脚本。这意味着您的node.js服务器会在依赖项中的任何一个打字稿源文件进行更改时自动重新启动,从而为您提供即时反馈和动态的开发体验。
结论
在基于打字稿的monorepos中,连续打字稿汇编的开销可以减慢开发。通过将TypeScript Execute(tsx
)工具与Node.js的--conditions
选项相结合,我们在开发Contember platform时就可以直接运行Typescript源代码。这种方法不仅减少了变化的周转时间,而且还简化了MonorePo软件包的集成,从而大大增强了我们的开发工作流程。