docs(core): nx 20 changelog (#28270)
- Add a changelog for Nx 20.0.0 - Demo the composite graph view in `Explore Your Workspace`
This commit is contained in:
parent
414f5c011d
commit
d131b0b677
18
docs/changelog/20_0_0.md
Normal file
18
docs/changelog/20_0_0.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Nx 20
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
{% cards cols="2" %}
|
||||||
|
{% card title="Composite Graph" type="document" url="/features/explore-graph" /%}
|
||||||
|
{% card title="New repositories can use TypeScript project references instead of path aliases" type="document" url="/nx-api/js" /%}
|
||||||
|
{% card title="Rspack plugin graduates from labs" type="document" url="/nx-api/rspack" /%}
|
||||||
|
{% /cards %}
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
|
||||||
|
{% cards cols="2" %}
|
||||||
|
{% card title="Generators use `as-provided`" type="document" url="/deprecated/as-provided-vs-derived" /%}
|
||||||
|
{% card title="Storybook generators use Storybook Component tests instead of Cypress tests" type="document" url="/recipes/storybook/storybook-interaction-tests" /%}
|
||||||
|
{% card title="@nrwl/* packages are no longer published" type="document" url="/deprecated/rescope" /%}
|
||||||
|
{% card title="Nx Release programatic API changes" type="external" url="https://github.com/nrwl/nx/pull/28224" /%}
|
||||||
|
{% /cards %}
|
||||||
@ -65,18 +65,23 @@ Click on a node to show a tooltip which also has a link to view more details abo
|
|||||||
You can trace the dependency chain between two projects by choosing a **Start** and **End** point in the project tooltips.
|
You can trace the dependency chain between two projects by choosing a **Start** and **End** point in the project tooltips.
|
||||||
Click on any dependency line to find which file(s) created the dependency.
|
Click on any dependency line to find which file(s) created the dependency.
|
||||||
|
|
||||||
|
Composite nodes represent a set of projects in the same folder and can be expanded in place to show all the individual projects and their dependencies. You can also "focus" a composite node to render a graph of just the projects inside that node. Composite nodes are essential to navigate a graph of even a moderate size.
|
||||||
|
|
||||||
Try playing around with a [fully interactive graph on a sample repo](https://nrwl-nx-examples-dep-graph.netlify.app/?focus=cart) or look at the more limited example below:
|
Try playing around with a [fully interactive graph on a sample repo](https://nrwl-nx-examples-dep-graph.netlify.app/?focus=cart) or look at the more limited example below:
|
||||||
|
|
||||||
{% graph height="450px" %}
|
{% side-by-side %}
|
||||||
|
|
||||||
|
{% graph height="450px" title="Project View" %}
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"hash": "58420bb4002bb9b6914bdeb7808c77a591a089fc82aaee11e656d73b2735e3fa",
|
"composite": false,
|
||||||
"projects": [
|
"projects": [
|
||||||
{
|
{
|
||||||
"name": "shared-product-state",
|
"name": "shared-product-state",
|
||||||
"type": "lib",
|
"type": "lib",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "shared/product-state",
|
||||||
"tags": ["scope:shared", "type:state"]
|
"tags": ["scope:shared", "type:state"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -84,6 +89,7 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"name": "shared-product-types",
|
"name": "shared-product-types",
|
||||||
"type": "lib",
|
"type": "lib",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "shared/product-types",
|
||||||
"tags": ["type:types", "scope:shared"]
|
"tags": ["type:types", "scope:shared"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -91,6 +97,7 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"name": "shared-product-data",
|
"name": "shared-product-data",
|
||||||
"type": "lib",
|
"type": "lib",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "shared/product-data",
|
||||||
"tags": ["type:data", "scope:shared"]
|
"tags": ["type:data", "scope:shared"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -98,6 +105,7 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"name": "cart-cart-page",
|
"name": "cart-cart-page",
|
||||||
"type": "lib",
|
"type": "lib",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "cart/cart-page",
|
||||||
"tags": ["scope:cart", "type:feature"]
|
"tags": ["scope:cart", "type:feature"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -105,13 +113,15 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"name": "shared-styles",
|
"name": "shared-styles",
|
||||||
"type": "lib",
|
"type": "lib",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "shared/styles",
|
||||||
"tags": ["scope:shared", "type:styles"]
|
"tags": ["scope:shared", "type:styles"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cart-e2e",
|
"name": "e2e-cart",
|
||||||
"type": "e2e",
|
"type": "e2e",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "e2e/cart",
|
||||||
"tags": ["scope:cart", "type:e2e"]
|
"tags": ["scope:cart", "type:e2e"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -119,6 +129,7 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"name": "cart",
|
"name": "cart",
|
||||||
"type": "app",
|
"type": "app",
|
||||||
"data": {
|
"data": {
|
||||||
|
"root": "cart",
|
||||||
"tags": ["type:app", "scope:cart"]
|
"tags": ["type:app", "scope:cart"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,8 +164,8 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"shared-styles": [],
|
"shared-styles": [],
|
||||||
"cart-e2e": [
|
"e2e-cart": [
|
||||||
{ "source": "cart-e2e", "target": "cart", "type": "implicit" }
|
{ "source": "e2e-cart", "target": "cart", "type": "implicit" }
|
||||||
],
|
],
|
||||||
"cart": [
|
"cart": [
|
||||||
{ "source": "cart", "target": "shared-styles", "type": "implicit" },
|
{ "source": "cart", "target": "shared-styles", "type": "implicit" },
|
||||||
@ -169,12 +180,129 @@ Try playing around with a [fully interactive graph on a sample repo](https://nrw
|
|||||||
"focus": null,
|
"focus": null,
|
||||||
"groupByFolder": false,
|
"groupByFolder": false,
|
||||||
"exclude": [],
|
"exclude": [],
|
||||||
"enableTooltips": true
|
"enableTooltips": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{% /graph %}
|
{% /graph %}
|
||||||
|
|
||||||
|
{% graph height="450px" title="Composite View (Nx 20+)" %}
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"composite": true,
|
||||||
|
"projects": [
|
||||||
|
{
|
||||||
|
"name": "shared-product-state",
|
||||||
|
"type": "lib",
|
||||||
|
"data": {
|
||||||
|
"root": "shared/product-state",
|
||||||
|
"tags": ["scope:shared", "type:state"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shared-product-types",
|
||||||
|
"type": "lib",
|
||||||
|
"data": {
|
||||||
|
"root": "shared/product-types",
|
||||||
|
"tags": ["type:types", "scope:shared"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shared-product-data",
|
||||||
|
"type": "lib",
|
||||||
|
"data": {
|
||||||
|
"root": "shared/product-data",
|
||||||
|
"tags": ["type:data", "scope:shared"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cart-cart-page",
|
||||||
|
"type": "lib",
|
||||||
|
"data": {
|
||||||
|
"root": "cart/cart-page",
|
||||||
|
"tags": ["scope:cart", "type:feature"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shared-styles",
|
||||||
|
"type": "lib",
|
||||||
|
"data": {
|
||||||
|
"root": "shared/styles",
|
||||||
|
"tags": ["scope:shared", "type:styles"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "e2e-cart",
|
||||||
|
"type": "e2e",
|
||||||
|
"data": {
|
||||||
|
"root": "e2e/cart",
|
||||||
|
"tags": ["scope:cart", "type:e2e"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cart",
|
||||||
|
"type": "app",
|
||||||
|
"data": {
|
||||||
|
"root": "cart/cart",
|
||||||
|
"tags": ["type:app", "scope:cart"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"shared-product-state": [
|
||||||
|
{
|
||||||
|
"source": "shared-product-state",
|
||||||
|
"target": "shared-product-data",
|
||||||
|
"type": "static"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "shared-product-state",
|
||||||
|
"target": "shared-product-types",
|
||||||
|
"type": "static"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shared-product-types": [],
|
||||||
|
"shared-product-data": [
|
||||||
|
{
|
||||||
|
"source": "shared-product-data",
|
||||||
|
"target": "shared-product-types",
|
||||||
|
"type": "static"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shared-e2e-utils": [],
|
||||||
|
"cart-cart-page": [
|
||||||
|
{
|
||||||
|
"source": "cart-cart-page",
|
||||||
|
"target": "shared-product-state",
|
||||||
|
"type": "static"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shared-styles": [],
|
||||||
|
"e2e-cart": [
|
||||||
|
{ "source": "e2e-cart", "target": "cart", "type": "implicit" }
|
||||||
|
],
|
||||||
|
"cart": [
|
||||||
|
{ "source": "cart", "target": "shared-styles", "type": "implicit" },
|
||||||
|
{ "source": "cart", "target": "cart-cart-page", "type": "static" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"workspaceLayout": {
|
||||||
|
"appsDir": "apps",
|
||||||
|
"libsDir": "libs"
|
||||||
|
},
|
||||||
|
"affectedProjectIds": [],
|
||||||
|
"focus": null,
|
||||||
|
"groupByFolder": false,
|
||||||
|
"exclude": [],
|
||||||
|
"enableTooltips": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
{% /graph %}
|
||||||
|
|
||||||
|
{% /side-by-side %}
|
||||||
|
|
||||||
### Export Project Graph to JSON
|
### Export Project Graph to JSON
|
||||||
|
|
||||||
If you prefer to analyze the underlying data of the project graph with a script or some other tool, you can run:
|
If you prefer to analyze the underlying data of the project graph with a script or some other tool, you can run:
|
||||||
|
|||||||
@ -103,6 +103,7 @@ export function Graph({
|
|||||||
groupByFolder={false}
|
groupByFolder={false}
|
||||||
theme={theme}
|
theme={theme}
|
||||||
projects={parsedProps.projects}
|
projects={parsedProps.projects}
|
||||||
|
composite={parsedProps.composite}
|
||||||
fileMap={{}}
|
fileMap={{}}
|
||||||
workspaceLayout={parsedProps.workspaceLayout}
|
workspaceLayout={parsedProps.workspaceLayout}
|
||||||
dependencies={parsedProps.dependencies}
|
dependencies={parsedProps.dependencies}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user