likes
comments
collection
share

你不知道的Turbowatch,比Nodemon更强大

作者站长头像
站长
· 阅读数 54

原文作者:Emmanuel John

原文地址:blog.logrocket.com/how-turbowa…

翻译:一川

1写在前面

当涉及到在Node.js环境的开发工作流程中自动化文件监控和应用程序重启时,像Nodemon这样的工具一直是开发人员的首选。

但是,在某些情况下,开发人员可能会由于特定的要求或偏好而寻求Nodemon的替代品。在这种情况下,Turbowatch成为一种有竞争力的替代方案,为Node.js提供了功能更强大,速度更快的文件更改检测器和任务编排器。

虽然TurbowatchNodemon的目的相似,但它们的功能,性能和用户体验存在明显差异。

在本文中,我们将探讨 Nodemon 提供的价值,您可能需要 Nodemon 替代品的原因,以及 Turbowatch 在实践中与Nodemon的比较。我们将为开发人员提供有关每种工具优缺点的见解,帮助他们根据自己的特定需求和偏好做出明智的决策。

2为什么使用Nodemon?

Nodemon JavaScript 生态系统中流行的工具,当它检测到应用程序目录中的文件更改时,它会自动重新启动服务器。Nodemon因其简单性和易用性而被广泛采用和赞赏,特别是在Node.js应用程序中。

使用 Nodemon,您的代码和开发过程不需要以任何方式更改。它为开发过程带来了显着的价值,具有显着的特点。

社区支持

Nodemon 拥有一个活跃的社区,提供广泛的文档、教程和支持渠道,为开发人员提供所需的资源。

自动重启

Nodemon 最初是为了自动重新启动无响应的进程而开发的,例如 Web 服务器。但是,它已经发展到支持正常退出的应用程序。当您的脚本完全终止时,Nodemon 会继续监控指定的一个或多个目录,准备在检测到任何更改时重新启动脚本。

轻松手动重启

Nodemon运行时,如果您发现需要手动重新启动应用程序,则不必停止并重新启动 Nodemon 本身。只需输入命令 rs ,然后按回车键,Nodemon 将立即启动您的进程重新启动,提供一种方便有效的重新启动方式,而不会中断您的工作流程。

运行非Node.js脚本

Nodemon 不仅仅是执行和监控 Node.js 脚本。它还支持执行和监视用其他编程语言编写的脚本。通过智能识别正在执行的脚本的文件扩展名,Nodemon 动态调整其监控行为以匹配该特定扩展名,无需手动配置文件,例如nodemon.json

nodemon --exec "python -v" ./app.py

现在,Nodemon将以详细模式使用Python运行 app.py 。它将自动检测带有 .py 扩展名的新文件或修改的文件。请务必注意,如果您没有向执行程序传递任何参数,则无需包含引号。

默认可执行文件

要自定义Nodemon中的默认可执行文件,您可以使用 nodemon.json 配置文件中的 execMap 属性。当您使用 Nodemon 固有不支持的编程语言时,此功能变得特别有价值。

例如,如果你想让Nodemon识别Perl脚本的 .pl 扩展名,你可以简单地将以下条目添加到你的 nodemon.json 文件中:

{
  "execMap": {
    "pl": "perl"
  }
}

现在,运行以下代码。Nodemon 将知道用作 perl 可执行文件:

nodemon script.pl

延迟重新启动

在某些情况下,可能需要在Nodemon检查新文件更改之前引入延迟。默认情况下,Nodemon 的超时时间为一秒。但是,如果您正在处理上传多个文件的情况,并且需要花费大量时间,则可能会导致不必要的应用程序重启。

要解决此问题,您可以使用该 --delay 命令在重新启动之前合并额外的限制或延迟:

nodemon --delay 10 server.js

这允许您配置适合您要求的特定延迟周期,确保 Nodemon 在触发重新启动之前等待所需的持续时间。

3使用 Nodemon 替代品的原因

虽然 Nodemon 是一个受欢迎的选择,但开发人员可能出于各种原因想要替代方案:

  • 灵活性:一些开发人员在配置选项或与 Nodemon 不完全支持的特定框架或语言的兼容性方面可能需要更大的灵活性
  • 性能优化:在某些情况下,开发人员可能会优先考虑性能优化,并寻求提高效率和缩短响应时间的替代方案
  • 用户体验:开发人员对用户界面、易用性以及与首选开发工具和 IDE 的集成具有独特的偏好。探索替代方案使他们能够找到更符合其工作流程的工具

在深入研究Turbowatch之前,让我们先了解Turborepo,这是激发Turbowatch创建的工具。

4什么是Turborepo?

Turborepo是一个突破性的解决方案,它利用了Facebook和谷歌等行业巨头开创的构建系统技术。它的主要任务是消除维护负担和开销,彻底改变我们构建系统的方式。

Turborepo 拥有增量构建的强大功能,使开发人员免于重复构建的痛苦过程。构建完成后,Turborepo 会记住结果,并智能地跳过重新处理已计算的部分。此功能可节省宝贵的时间和精力,使开发人员能够专注于更重要的任务。

内容感知哈希

仅依靠时间戳的日子已经一去不复返了。Turborepo引入了内容感知哈希,这是一种分析文件实际内容的复杂方法。通过这样做,它可以准确地确定哪些组件需要重新构建,从而消除不必要的重新编译并确保最佳效率。

远程缓存

Turborepo的远程缓存功能允许有效的协作。现在,您可以毫不费力地与团队成员共享远程构建缓存,并将其无缝集成到 CI/CD 工作流中。这种共享缓存进一步加快了构建时间,实现了快速迭代和更快的开发周期。

浏览器内构建配置文件生成

Turborepo通过其基于浏览器的分析功能为开发人员提供全面的见解。生成详细的构建配置文件,可以方便地将其导入到Chrome或Edge等流行浏览器中。通过可视化消耗最多时间的任务,开发人员可以更深入地了解性能瓶颈,从而优化其工作流。

尽管Turborepo功能强大,但它不支持文件监视操作。这个缺失的功能是创建Turbowatch的原因。

5什么是Turbowatch?

Turbowatch 可用作管理和调试文件监视操作的多功能工具箱。它的发展源于Turborepo中没有“watch”模式。Turbowatch 简化了文件监视活动的协调,消除了所涉及的复杂性。

Turbowatch专为monorepo或复杂的工作空间而设计,在处理众多互连的构建步骤时,它被证明是有价值的。无论是构建和重建依赖项、管理 Docker 容器、填充数据还是触发通知,Turbowatch 都能简化项目中的这些操作。

但是,值得注意的是,如果您正在处理的简单项目只需要一个构建步骤或watch操作,则可能不需要使用 Turbowatch。在具有多个相互依赖的进程和更复杂的工作区配置的方案中,它的优势最为突出。

6Turbowatch vs. Nodemon的实践比较

TurbowatchNodemon都是在开发环境中广泛使用的自动代码重新加载工具。虽然它们具有类似的目的,但它们在特性和功能方面存在一些显着差异。

文件监控和重启

Turbowatch

Turbowatch 结合使用文件系统事件监控和智能事件处理来监控文件更改。

首先,在初始化期间,Turbowatch 会扫描指定的目录和文件,以创建其状态的初始快照,捕获文件路径、大小和修改时间戳等元数据。

然后,它进入一个连续的监视循环,在那里它使用操作系统提供的系统级 API 侦听文件系统事件。这些 API,如 Node.js 中的 fs.watch,会在受监控的目录或文件中发生更改时通知 Turbowatch

收到事件后,Turbowatch通过将事件详细信息与初始快照进行比较来处理它。它确定已发生的特定更改,例如文件修改、删除或创建。

根据检测到的变化类型,Turbowatch会触发适当的操作。例如,在文件修改的情况下,它会启动代码重新加载以反映更新的更改。对于文件删除,它处理代码删除或清理,对于文件创建,它管理新代码的添加。

Nodemon

另一方面,Nodemon 通过使用文件系统事件侦听器来监视文件更改。当 Nodemon 运行时,它会持续观察指定的目录和文件以进行修改。一旦检测到文件更改,Nodemon 就会触发一个操作,例如重新启动服务器或执行指定的命令。这允许开发人员查看其代码更改的效果,而无需手动停止和重新启动服务器。

Nodemon 通过利用底层操作系统提供的文件系统 API 来实现这一点,例如 Node.js 中的 fs.watch。每当受监控的文件或目录中发生更改时,这些 API 都会通知 Nodemon

监听多个脚本

默认情况下,Nodemon 监视当前工作目录。但是,如果要对此行为进行更多控制,可以使用该 --watch 选项指定路径:

nodemon --watch app --watch libs app/server.js

使用此命令,Nodemon 只有在 或 ./app ./libs 目录中有更改时才重新启动。Nodemon 会自动遍历子目录,因此无需显式包含它们。

同样,Turbowatch默认在当前工作目录中查找 turbowatch.ts 脚本。但是,您可以通过向 Turbowatch 提供多个脚本作为参数来灵活地同时运行多个脚本:

turbowatch ./foo.ts ./bar.ts

您还可以使用 glob 模式指定多个脚本:

turbowatch '**/turbowatch.ts'

通过使用 Turbowatch,您可以确保手表操作的一致性和效率,从而实现脚本的无缝监控和执行。

特性和功能

在增量构建方面,Turbowatch领先于Nodemon。它可以智能地记住以前构建的代码,并且只重新编译必要的部分,从而节省宝贵的时间和资源。此功能大大提高了开发效率,尤其是在具有复杂依赖项的大型项目中。

在内容感知哈希方面,Turbowatch再次大放异彩。通过分析文件内容而不是依赖时间戳,它可以准确地确定需要重建哪些文件。这可确保代码重新加载过程精确,并避免不必要的重新编译。

远程缓存是Turbowatch展示其优势的另一个领域。Turbowatch 能够与团队成员共享远程构建缓存并将其集成到 CI/CD 工作流程中,从而显著加快了构建时间。此协作功能可促进无缝协作并加快迭代速度。

另一方面,Nodemon 主要关注服务器自动重启。它在简单性和易用性方面表现出色。

性能和效率

凭借其基于Rust的技术和高级功能,Turbowatch 优先考虑高性能和优化。它使用智能文件监控技术(如内容感知哈希和增量构建)来最大程度地减少不必要的重新编译并缩短构建时间。通过有效地检测文件更改并有选择地仅重建必要的部件,Turbowatch提供了出色的性能,并有助于简化开发过程。

另一方面,Nodemon 主要关注基于 JavaScript 的开发环境中的自动服务器重启。虽然Nodemon提供了简单易用的功能,但它可能无法提供与Turbowatch相同级别的性能优化。Nodemon 通常依赖于操作系统提供的文件系统事件侦听器,这可能在细粒度更改检测和优化方面存在限制。

因此,如果性能和效率是重中之重,Turbowatch将是一个引人注目的选择。其高级功能和定制方法使其适用于构建时间和增量更新至关重要的大型项目或方案。另一方面,Nodemon 仍然是快速开发周期的热门选择,其中简单性和易用性优先于性能优化。

易于使用和集成

虽然Nodemon缺乏Turbowatch的一些高级功能,但对于优先考虑简单性和易于设置的开发人员来说,它仍然是一个可靠的选择。它提供了一个简单的配置过程,可以快速集成到现有项目中,使开发人员能够专注于他们的代码,而不会受到不必要的干扰。

另一方面,Turbowatch需要更多的初始设置和配置。这可能涉及安装其他依赖项或修改构建过程以充分利用 Turbowatch 的功能。

社区和支持

Nodemon是一个被广泛采用和成熟的工具,拥有比Turbowatch更大、更成熟的社区。它已经存在了更长的时间,因此,有广泛的在线资源、论坛和社区讨论可用。开发人员可以找到大量与 Nodemon 相关的教程、示例和故障排除指南,从而更轻松地寻求帮助并找到常见问题的解决方案。

Turbowatch是一个相对较新的工具,其社区较小。因此,为 Turbowatch 寻找特定资源或社区支持是有限的。然而,其生态系统的日益普及和进步可能会导致社区的扩大和未来更多的支持。

同样值得注意的是,TurbowatchNodemon都有活跃的开源存储库,开发人员可以在其中提出问题,贡献代码,并直接向项目的维护者和贡献者寻求帮助。

7写在最后

TurbowatchNodemon具有类似的目的,但满足了不同的需求。Turbowatch 凭借增量构建、内容感知哈希和远程缓存等高级功能脱颖而出,使其成为大型项目和团队的绝佳选择。

同时,Nodemon的简单性和易用性使其成为小型项目或快速原型设计的热门选择。最终,TurbowatchNodemon之间的选择取决于项目的具体要求和开发人员的优先级。

8一川说

觉得文章不错的读者,不妨点个关注,收藏起来上班摸鱼的时候品尝。

欢迎关注笔者公众号「宇宙一码平川」,助你技术路上一码平川。

转载自:https://juejin.cn/post/7249386837369749559
评论
请登录