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

 2023-09-05 阅读 73 评论 0

摘要:文章目录前言一、Nx 设计理念二、Nx 核心概念1. 项目图 - Project graph2.元数据驱动 - Metadata driven3. 任务图 - Task graph4.受影响指令 Affected commands5. 计算缓存 - Computation hashing and caching三、常用指令1. 创建工作区2.代码生成3. 执行任务4. 项目图5. 已

文章目录

  • 前言
  • 一、Nx 设计理念
  • 二、Nx 核心概念
    • 1. 项目图 - Project graph
    • 2.元数据驱动 - Metadata driven
    • 3. 任务图 - Task graph
    • 4.受影响指令 Affected commands
    • 5. 计算缓存 - Computation hashing and caching
  • 三、常用指令
    • 1. 创建工作区
    • 2.代码生成
    • 3. 执行任务
    • 4. 项目图
    • 5. 已安装插件
  • 目录结构
  • 参考


前言

Nx is a smart, fast and extensible build system with first class monorepo support and powerful integrations.

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, 意思是在版本控制系统的单个代码库里包含了许多项目的代码。这些项目虽然有可能是相关的,但通常在逻辑上是独立的,并由不同的团队维护。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/1118.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息