Nx 介绍: 基于插件的单一代码库(Monorepo)构建系统


前言

单一代码仓库:一种将多个项目或代码库存储在同一个版本控制系统中的策略,以便于跨项目协作和代码共享。

Nx is a powerful open-source build system that provides tools and techniques for enhancing developer productivity, optimizing CI performance, and maintaining code quality.

Nx是一个强大的开源构建系统,它提供了用于提高开发效率、优化持续集成CI和提高代码质量的工具和技术。

Everything in Nx comes with metadata to enable toolability.
Nx中的所有内容都带有元数据以保证可工具可用性


一、Nx 设计理念

Nx的设计理念与Visual Studio Code类似。VSCode是一个强大的文本编辑器,即使你不安装任何扩展,你也可以使用它非常高效。VSCode的扩展生态系统可以真正提高你的工作效率。

Nx的核心是通用的、简单的和透明的。Nx插件尽管对许多项目非常有用,但完全是可选的。Nx是一个VSCode的构建工具,具有强大的核心,由元数据驱动,并通过插件进行扩展。

二、Nx 核心概念

1. 项目图 - Project graph

项目图用于反映库中的源代码和所有不在库中创建的外部依赖项(如Webpack、React、Angular等)。Nx会存储缓存的项目图,所以它只会重新分析你修改过的文件。
在这里插入图片描述

2.元数据驱动 - Metadata driven

Nx中的所有东西都带有元数据,以支持工具性。默认值、验证、自动完成工作等等都在模式中定义,而不是在代码中定义。

3. 任务图 - Task graph

Nx基于项目图来创建任务图。每当你运行任何东西时,Nx都会从项目图中创建一个任务图,然后执行该图中的任务。但任务图与项目图不要求相同结构如,运行 nx run-many --target=test --projects=app1,app2,lib
生成的任务图:尽管app1依赖于 lib,但 app1:test不依赖于lib:test。这意味着两个任务可以并行运行,提高整体执行时间:在这里插入图片描述

4.受影响指令 Affected commands

随着工作空间的增长,重新测试所有项目会变得太慢。 为了解决这个问题,Nx实现了代码变更分析,以获得需要重新测试的最小项目集。
nx affected --target=test
在这里插入图片描述

5. 计算缓存 - Computation hashing and caching

Nx支持计算缓存,不会重复执行相同的计算。 这个计算缓存是可插拔的,并且可以分布式运行。
Nx按照正确的顺序运行任务图中的任务。在运行任务之前,Nx会计算它的计算散列。只要计算哈希值相同,运行任务的输出也相同。如果 Nx 没有找到这个计算,Nx 运行这个任务,完成后,它获取输出和终端输出,并将其存储在本地(如果是远程配置的话),所有这些对用户都是透明的。
在这里插入图片描述

三、常用指令

1. 创建工作区

npx create-nx-workspace@latest
指定创建参数 -preset 预设:
npx create-nx-workspace --preset=core

2.代码生成

nx generate <collection:generator>

参数:dryRun ,只展示结果给,不实际生成本地文件

3. 执行任务

nx run <target> [options]

4. 项目图

nx graph

5. 已安装插件

nx list [plugin]

目录结构

myorg/
├── apps/
├── libs/
├── tools/
├── workspace.json
├── nx.json
├── package.json
└── tsconfig.base.json
  • apps/ 应用源码,建议尽量保持应用源码简洁,通用逻辑放到库源码中
  • libs/ 库源码
  • tools/ 常用工具,如 数据库脚本、工作区代码生成器脚本等
  • workspace.json 列出当前工作区的所有项目(可选)
  • nx.json Nx Cli的配置文件,如缓存及任务执行设置
  • tsconfig.base.json TypeScript全局设置

参考

  • Nx官网文档
  • Monorepo, 意思是在版本控制系统的单个代码库里包含了许多项目的代码。这些项目虽然有可能是相关的,但通常在逻辑上是独立的,并由不同的团队维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值