Lukas Holzer:所以你在 Nx 工作。在我们深入探讨该主题之前,您能否解释一下 Nx 是什么以及为什么它与本次讨论相关?
Juri Strumpflohner:当然! Nx 是一个旨 臺灣電話號碼 在提高开发人员生产力的构建系统。这并不意味着我们以与 Webpack 或 ESBuild 相同的方式构建您的项目。相反,我们提供以尽可能最有效的方式运行任务的功能,例如构建、测试、linting 等。这本质上提高了本地开发过程中的速度,尤其是 CI 上的速度。这是我们旨在提高开发人员生产力的主要支柱。
,您可以选择在 Nx 工作区中使用。这些 NPM 包配备了特定的功能,例如,允许您构建项目设置。它们提供了用于使用所选技术堆栈(例如 TypeScript)的预配置设置,并且对于集成不同的技术特别有价值,这在处理更大的代码库时尤其具有挑战性。
Lukas Holzer:为什么 Nx 对于大型企业组织构建大型应用程序来说是一个不错的选择?
Juri Strumpflohner 我认为 Nx 与市场上其他工具相比的主要区别之一是,Nx 是我们与大型财富 500 强公司合作的结果。我们已经看到(也感受到了)在大型代码库上工作的痛苦,这就是 Nx 最初的开始方式以及我们在 Nx 中拥有的许多功能。这就是为什么 Nx 今天可以使用其代码脚手架功能快速开始使用新的 Nx monorepo,而且还可以通过利用 Nx 和 Nx Cloud 缓存以及 CI 上的任务分配来扩展到拥有数千个项目的大型 monorepo。
Lukas Holzer:因此,在仔细研究 Nx 时,您可以通过两种方式进行设置。 “集成”和“基于包”设置之间有什么区别?什么时候青睐什么?
Juri Strumpflohner:这是我们(在 Nx)提出的一个术语 - 是的,命名很难 * 笑 * - 但我们希望将名称与目前在 JS 生态系统中最常见的 monorepos 类型相关联。 “基于包”的 monorepo 是您在许多或大多数开源库中看到的。看看 Angular、React、Vue 或 Vite 存储库(仅举几例)。这些是包含相关包的 monorepos,其明确的意图是对其进行版本控制并将其发布到 NPM。这就是 Lerna 的诞生方式。这些存储库的特点通常是管理非常松散,因为每个包可能使用不同的工具;包通过其 package.json 依赖项相互依赖,并利用 NPM/Yarn/PNM 工作区功能。迁移到基于包的 monorepo 非常容易,因为一开始您只需将项目及其依赖项移至 monorepo 中,并保持大多数其他内容不变。如果你想在这样的设置中使用 Nx,你基本上只需要 nx NPM 包,仅此而已。它所做的就是运行您的任务并应用缓存和其他功能来帮助加快速度。
“集成”的 monorepo 提供了更多 DX。特别是在 Nx 的情况下,这是通过 Nx 插件完成的。例如,在 Bazel 中,您可以通过专用语言规则来使用。这些插件通常是特定于技术的,比如 React、Remix、Next、Astro、Vite 等插件,它们提供的功能可以帮助您轻松设置新项目,它们预先配置了很多工具(例如,针对您必须自行设置的特定技术的 linting、测试、e2e 测试)。通过这种方式,它们更加“集成”,因为它们可以帮助您克服集成问题,例如以连贯的方式将 React 库创建到 monorepo、设置 TypeScript、linting、基于 Vite 的单元测试等。它也可以很好地与现有项目配合使用。