JavaScript 构建系统:比较和指南

了解 2023 年最新、最好的 JavaScript 构建工具,例如 Webpack、Rollup、Parcel 等。了解如何为您的项目选择和使用它们。

构建系统的需求

现代开发团队致力于持续改进。这些措施的范围包括减少构建时间和认知负荷、提高代码质量以及与其他开发人员的有效协作。

假设您创建一个简单的 Hello World 应用程序。对于任何现代框架,构建都应该在几秒钟内完成。因此,您不会关心改善其构建时间,因为收益微不足道。但是如果您继续向其添加更多功能怎么办?正如许多人所经历的那样,构建时间随着应用程序的增长而增加。与此同时,您的开发团队也在不断壮大。

想象一下,如果我们将构建时间缩短 1 秒,开发人员大约会进行 12 次构建日

当开发人员数量增加时,或者随着时间的推移,我们可以节省的时间变得相当可观。如果我们只能构建我们在代码中修改的部分怎么办?这可以减少总体构建时间并通过减少应用程序增长的影响来节省资源。构建时间的增加只是众多问题之一。

为了解决这些众所周知的问题,诞生了 Bit、Nx 和 Lerna 等构建系统。它们是通过整体方法应对这些挑战的优秀工具。

少量

Bit,提供用于组件驱动开发的工具,强调组件隔离和可重用性。它引入了核心构建块“比特组件”的独特概念。

在比特的世界里,一切都是组件。例如,您的代码模块、UI 组件、环境配置 — 只要您能想到的。

这些 Bit 组件组合在一起构建最终的应用程序。因此,Bit 支持 monorepo 和 polyrepos,让您可以选择最适合您的。

  1. 模块/组件使用描述性包名称进行维护。不需要别名。
  2. 自动依赖性检测和智能依赖性解析。不需要多余的 package.json 文件。
  3. 可重复使用的开发环境,包括所有工具和配置。可以配置单个可重用环境来处理任意数量的组件。无需无数的 tsconfig.jsoneslintrcpretterrc 配置。
  4. 组件是单独且独立构建的。包、捆绑包和二进制文件等构建工件存储在组件版本中。
  5. 高效构建。 Bit 的构建本质上是高效的,因为它们在单独的组件上运行。未修改的组件将不会被重建。多个(兄弟)组件是并行构建的。
  6. 预览和自动生成的文档。每个组件都是具有自动生成的文档和组件预览的资产。
  7. 组件生成器允许您使用预构建的模板创建新组件。这通常用于加速开发并保持一致的开发标准。
  8. 比特是发展战略的推动者。您可以将其用作单一存储库解决方案(独立或与其他单一存储库解决方案一起使用)或作为聚合存储库解决方案。您甚至可以使用完全分布式的代码库而无需存储库,其中组件的唯一真实来源位于其远程托管“远程作用域”中。

提高构建速度

Bit 组件的开发生命周期是独特的。您可以创建一个空工作区并仅导入要修改的组件。由于每个 Bit 组件都位于 Bit 云中并具有自己的文档,因此您可以搜索它们并找到您需要的组件。还可以通过其依赖图直观地找到它们。

因此,一旦您修改了添加到工作区的一个或多个组件,Bit 将仅在本地构建这些组件,这使得构建过程有效。一旦组件导出到 Bit Cloud,Bit 的原生 CI 系统(Ripple CI)就可以检查受此更改影响的所有组件并并行测试它们。

比特云

当您第一次访问 bit.cloud时,您会发现Bit社区开发和共享的数千个组件。从 React 组件到为特定目的而开发的 Node 模块,这些内容各不相同。因此,简而言之,Bit Cloud 提供了一种组织 Bit 组件的方法,支持存储和版本控制、展示组件文档、展示组件测试结果等。它允许通过跨团队共享组件来与其他开发人员进行协作。由于 Bit Cloud 为 Bit 组件提供了完整的源代码控制支持,因此您可以在孤岛中使用它,也可以与 Git 结合使用。 Ripple CI 提供了处理组件构建并测试其连锁反应以实现高效组件构建的能力。

使用 Bit,您可以避免在设计扩展时可能遇到的常见陷阱,从根本上消除它们。

尼克斯

Nx 是一个主要专注于集成 monorepos 的构建系统。它着眼于通过使用工具和技术解决每个问题来缓解扩展开发时最常见的挑战。例如,NX 通过从一个开发人员到另一个开发人员重用构建工件缓存来缩短构建时间。这种方法与 Bit 不同,Bit 避免共享缓存,因为它只构建默认情况下修改的内容。 Nx 还拥有一个围绕工具的生态系统,包括:

  1. 高效、分布式、并行地运行任务。
  2. 支持强制执行模块边界。
  3. 在本地和远程缓存工件,通过重用它们来减少构建时间。
  4. 处理项目依赖关系和更新。
  5. 可选的工具支持来构建正在修改的内容。
  6. 支持各种框架,如 Angular、React、Vue、Node、Rust 等。
  7. 对 Monorepos 的扩展支持。

借助 Nx,您可以通过使用他们提供的工具并遵循他们推荐的最佳实践来避免扩展开发时可能遇到的常见陷阱。

如果您计划从单一存储库迁移到多存储库设置,请考虑将 NX 与 Bit 集成

提高构建速度

借助 Nx,一旦您可以从 Git 检出 Monorepo 代码,您就可以使用 Nx CLI 在本地构建这些组件。 CLI 足够智能,可以了解正在更改的内容并单独处理受影响的模块。构建完成后,您还可以与 Nx 云共享构建缓存,供 CI 和其他团队成员重复使用。它允许在每个开发人员的机器上重建组件,从而减少总体构建时间。

学习

Lerna 是一个专注于基于包的 monorepos 的构建系统。它允许从同一存储库发布多个包。尽管 Learna 已于 2022 年 4 月宣布废弃,但 Nx 背后的公司 (Nrwl) 已经接管了 Lerna。因此,Lerna 与 Nx 紧密集成,为打包的基础 monorepos 提供类似的功能;

  1. 高效、分布式、并行地运行任务。
  2. Nx支持下的计算和远程缓存。
  3. 仅重建和重新测试更改。
  4. 项目图形可视化工具可简化您对工作空间的理解。
  5. 包所有权管理。
  6. Lerna 与 Nx 云紧密集成,使其能够跨环境共享缓存。

Lerna 是解决基于打包的单一存储库所带来的最常见挑战的先驱。然而,由于它没有得到积极维护,因此值得考虑 Bit 或 Nx,具体取决于您的用例。

#javascript 

JavaScript 构建系统:比较和指南
1.05 GEEK