Compare commits

..

1 Commits

Author SHA1 Message Date
“JamesHenry” fb42a0dfac chore: use @nx/graph for graph implementation details 2024-07-27 22:56:21 +04:00
1316 changed files with 31149 additions and 92903 deletions
+4 -4
View File
@@ -48,7 +48,7 @@ commands:
- run:
name: Install pnpm package manager (linux)
command: |
npm install --prefix=$HOME/.local -g @pnpm/exe@9.8.0
npm install --prefix=$HOME/.local -g @pnpm/exe@8
- when:
condition:
equal: [<< parameters.os >>, macos]
@@ -56,7 +56,7 @@ commands:
- run:
name: Install pnpm package manager (macos)
command: |
npm install -g @pnpm/exe@9.8.0
npm install -g @pnpm/exe@8
- run:
name: Install Dependencies
command: |
@@ -91,7 +91,7 @@ jobs:
- checkout
- nx/set-shas:
main-branch-name: 'master'
- run: npx nx-cloud@next start-ci-run --distribute-on="auto linux-medium" --stop-agents-after="e2e"
- run: npx nx-cloud@next start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e"
- run:
command: |
sudo apt-get update
@@ -160,7 +160,7 @@ jobs:
command: |
HAS_CHANGED=$(node ./scripts/check-react-native-changes.js $NX_BASE $NX_HEAD);
if $HAS_CHANGED; then
pnpm nx affected -t e2e-macos-local --parallel=1 --base=$NX_BASE --head=$NX_HEAD
pnpm nx affected -t e2e-macos-ci --parallel=1 --base=$NX_BASE --head=$NX_HEAD
else
echo "Skip E2E tests for macOS as there are no changes in React Native projects."
fi
+7
View File
@@ -0,0 +1,7 @@
FROM mcr.microsoft.com/devcontainers/typescript-node:20-bullseye
# Update the underlying (Debian) OS, to make sure we have the latest security patches and libraries like 'GLIBC'
RUN sudo apt-get update && sudo apt-get -y upgrade
# Update pnpm
RUN npm install -g pnpm@8.15.7
+9 -24
View File
@@ -3,46 +3,31 @@
{
"name": "NxDevContainer",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// Starting from a base image that already contains GLIBC v2.33 or higher (required by Nx)
// Try a more recent distribution, if your are having build issues related to GLIBC version
// Here we use 'bookworm', which is based on `Debian-12`, which comes with `GLIBC v2.36`
// (Nx tools currenlty requires `GLIBC v2.33` or higher)
"image": "mcr.microsoft.com/devcontainers/typescript-node:20-bookworm",
"build": {
// Path is relative to the devcontainer.json file.
"dockerfile": "Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/rust:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// 4211 = nx graph port
// 4873 = verdaccio (local npm registry) port
"forwardPorts": [4211, 4873],
"forwardPorts": [4211],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "./.devcontainer/postCreateCommand.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"nrwl.angular-console",
"firsttris.vscode-jest-runner",
"eamodio.gitlens",
"mhutchie.git-graph",
"mutantdino.resourcemonitor" // to monitor cpu, memory usage from the dev container
"eamodio.gitlens"
],
"settings": {
"debug.javascript.autoAttachFilter": "disabled" // workaround for that issue: https://github.com/microsoft/vscode-js-debug/issues/374#issuecomment-622239998
"debug.javascript.autoAttachFilter": "onlyWithFlag" // workaround for that issue: https://github.com/microsoft/vscode-js-debug/issues/374#issuecomment-622239998
}
}
},
// To improve disk performances when installing node modules
// See https://code.visualstudio.com/remote/advancedcontainers/improve-performance
"mounts": [
"source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume"
],
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
"remoteUser": "root"
// "remoteUser": "root"
}
+2 -20
View File
@@ -1,23 +1,5 @@
#!/bin/sh
# Update the underlying (Debian) OS, to make sure we have the latest security patches and libraries like 'GLIBC'
echo "⚙️ Updating the underlying OS..."
sudo apt-get update && sudo apt-get -y upgrade
# Uninstall globally installed PNPM (required version will be reinstalled through corepack)
echo "❌ Uninstalling globally installed PNPM..."
npm uninstall -g pnpm
# Prevent corepack from prompting user before downloading PNPM
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
# Enable corepack
corepack enable
# Install the PNPM version defined in the root package.json
echo "⚙️ Installing required PNPM version..."
corepack prepare --activate
# Install NPM dependencies
echo "⚙️ Installing NPM dependencies..."
# Install dependencies
pnpm install --frozen-lockfile
+6 -6
View File
@@ -22,7 +22,7 @@ env:
NX_RUN_GROUP: ${{ github.run_id }}-${{ github.run_attempt }}
CYPRESS_INSTALL_BINARY: 0
NODE_VERSION: 18
PNPM_VERSION: 9.8.0 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
PNPM_VERSION: 8.15.7 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
jobs:
# We first need to determine the version we are releasing, and if we need a custom repo or ref to use for the git checkout in subsequent steps.
@@ -138,7 +138,7 @@ jobs:
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
npm i -g pnpm@8.15.7 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-gnu
@@ -147,7 +147,7 @@ jobs:
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
npm i -g pnpm@8.15.7 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
pnpm nx run-many --verbose --target=build-native -- --target=x86_64-unknown-linux-musl
@@ -165,7 +165,7 @@ jobs:
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
build: |-
set -e &&
npm i -g pnpm@9.8.0 --force &&
npm i -g pnpm@8.15.7 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-gnu
@@ -191,7 +191,7 @@ jobs:
build: |-
set -e &&
rustup target add aarch64-unknown-linux-musl &&
npm i -g pnpm@9.8.0 --force &&
npm i -g pnpm@8.15.7 --force &&
pnpm --version &&
pnpm install --frozen-lockfile &&
pnpm nx run-many --verbose --target=build-native -- --target=aarch64-unknown-linux-musl
@@ -318,7 +318,7 @@ jobs:
env
whoami
sudo pkg install -y -f node libnghttp2 www/npm git
sudo npm install --location=global --ignore-scripts pnpm@9.8.0
sudo npm install --location=global --ignore-scripts pnpm@8.15.7
curl https://sh.rustup.rs -sSf --output rustup.sh
sh rustup.sh -y --profile minimal --default-toolchain stable
source "$HOME/.cargo/env"
+3 -3
View File
@@ -1,7 +1,7 @@
launch-templates:
linux-medium:
resource-class: 'docker_linux_amd64/medium+'
image: 'ubuntu22.04-node20.11-v10'
image: 'ubuntu22.04-node20.11-v3'
env:
GIT_AUTHOR_EMAIL: test@test.com
GIT_AUTHOR_NAME: Test
@@ -21,14 +21,14 @@ launch-templates:
~/.cache/Cypress
~/.cache/ms-playwright
~/.pnpm-store
base_branch: 'master'
base-branch: 'master'
- name: Install e2e deps
script: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- name: Install Pnpm
script: |
npm install -g pnpm@9.8.0
npm install -g pnpm@8
- name: Pnpm Install
script: |
+1 -1
View File
@@ -1,2 +1,2 @@
nx-dev/**/jest.config.js
.next
.next
-1
View File
@@ -172,7 +172,6 @@ rust-toolchain @nrwl/nx-native-reviewers
/CONTRIBUTING.md @FrozenPandaz @isaacplmann
/CODE_OF_CONDUCT.md @FrozenPandaz @isaacplmann
/CODEOWNERS @FrozenPandaz @AgentEnder
/packages/nx/src/nx-cloud/utilities/url-shorten.ts @MaxKless
# Scripts
/scripts/documentation @nrwl/nx-docs-reviewers
+3 -21
View File
@@ -49,33 +49,15 @@ The repo comes with a preconfigured `devcontainer.json` file (located in `.devco
If you open the repo in [Github Codespace](https://github.com/features/codespaces), it will also leverage this config file, to setup the codespace, with the same required tools.
> 💡 **Troubleshooting**
>
> If you are having issues when running Nx commands like `build`, `test`... related to the version of `GLIBC`,
> it probably means the version that is installed on the devcontainer, **is outdated** compare to the minimum version required by Nx tools.
>
> You can check currently installed version by running the following command, in a terminal within the container:
>
> `ldd --version`
>
> Then, try updating the base image used in [devcontainer.json](.devcontainer/devcontainer.json) and rebuild it, to see if it solved the issue.
>
> Current base image is `"mcr.microsoft.com/devcontainers/typescript-node:20-bookworm"` which is based on `Debian-12 (bookworm)`,
> which comes with `GLIBC v2.36` pre-installed (Nx tools currenlty requires `GLIBC v2.33` or higher).
## Building the Project
> 💡 Nx uses `Rust` to build native bindings for Node. Please make sure that you have Rust installed via [rustup.rs](https://rustup.rs)
> If you have `VSCode` + `Docker`, this can be automated for you, see [section](#development-workstation-setup) above
> Nx uses Rust to build native bindings for Node. Please make sure that you have Rust installed via [rustup.rs](https://rustup.rs)
> If you have VSCode + Docker, this can be automated for you, see [section](#development-workstation-setup) above
After cloning the project to your machine, to install the dependencies, run:
```bash
pnpm install
// or prefer...
pnpm install --frozen-lockfile // if you haven't changed any dependency
pnpm i
```
To build all the packages, run:
Generated
+2 -2
View File
@@ -1177,9 +1177,9 @@ dependencies = [
[[package]]
name = "napi-build"
version = "2.1.3"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a"
checksum = "2f9130fccc5f763cf2069b34a089a18f0d0883c66aceb81f2fad541a3d823c43"
[[package]]
name = "napi-derive"
+15 -34
View File
@@ -21,45 +21,26 @@
# Smart Monorepos · Fast CI
Nx is a build system, optimized for monorepos, with plugins for popular frameworks and tools and advanced CI capabilities including caching and distribution.
Nx is a build system with built-in tooling and advanced CI capabilities. It helps you maintain and scale monorepos, both locally and on CI.
Create a new Nx workspace with
A few links to help you get started:
```shell
npx create-nx-workspace
```
- [Nx.Dev: Documentation, Guides, Interactive Tutorials](https://nx.dev)
- [Nx.Dev: Core Tutorials](https://nx.dev/getting-started/intro)
- [Recipe: Adding Nx to an Existing Monorepo](https://nx.dev/recipes/adopting-nx/adding-to-monorepo)
- [Official Nx YouTube Channel](https://www.youtube.com/@NxDevtools)
- [Blog Posts About Nx](https://nx.dev/blog)
...or run
```
npx nx init
```
to add Nx to your existing workspace to get faster task scheduling, caching and more. More [in the docs](https://nx.dev/getting-started/intro#try-nx-yourself).
## Learn about CI with Nx Cloud
[Nx Cloud](https://nx.dev/nx-cloud) connects directly to your existing CI setup, helping you scale your monorepos on CI by leveraging [remote caching](https://nx.dev/ci/features/remote-cache?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo), [task distribution across multiple machines](https://nx.dev/ci/features/distribute-task-execution?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo), [automated e2e test splitting](https://nx.dev/ci/features/split-e2e-tasks?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo) and [automated task flakiness detection](https://nx.dev/ci/features/flaky-tasks?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
Connect your existing Nx workspace with
```
npx nx connect
```
Learn more in the [Nx CI docs &raquo;](https://nx.dev/ci/intro?utm_source=nxrepo&utm_medium=readme&utm_campaign=nxrepo)
## Useful links
- [Our docs](https://nx.dev/docs)
- [Our blog](https://nx.dev/blog)
- [Our community discord, live stream,...](https://nx.dev/community)
- [Our YouTube channel](https://www.youtube.com/@NxDevtools)
- [Our Twitter/X](https://x.com/nxdevtools)
<p style="text-align: center;"><a href="https://www.youtube.com/@nxdevtools/videos" target="_blank" rel="noreferrer"><img src="./images/nx-courses-and-videos.svg"
<p style="text-align: center;"><a href="https://nx.dev/#learning-materials" target="_blank" rel="noreferrer"><img src="./images/nx-courses-and-videos.svg"
width="100%" alt="Nx - Smart Monorepos · Fast CI"></a></p>
# Engage with the Core Team and the Community
- [Nx.Dev Community Page: Community Discord Channel, Newsletter, etc.](https://nx.dev/community)
- [The Nx Show Playlist on YouTube](https://www.youtube.com/playlist?list=PLakNactNC1dE8KLQ5zd3fQwu_yQHjTmR5). It's a
regular YouTube stream where we talk all things Nx. Join the stream, ask questions, etc.
- [Follow Nx on Twitter](https://twitter.com/NxDevTools)
## Want to help?
If you want to file a bug or submit a PR, read up on
-10
View File
@@ -379,11 +379,6 @@
"description": "Nx plugin that applies betterer standards on a per-project basis.",
"url": "https://github.com/spaceribs/spaceribs/tree/main/packages/nx-betterer"
},
{
"name": "@nx-extensions/helm",
"description": "Nx plugin providing comprehensive support for Helm charts, including generation, packaging, and publishing capabilities.",
"url": "https://github.com/marcolongol/nx-extensions/tree/main/packages/helm"
},
{
"name": "@nx-tools/nx-container",
"description": "Nx plugin to build OCI containers with Docker, Podman or Kaniko.",
@@ -493,10 +488,5 @@
"name": "@huge-nx/conventions",
"description": "Plugin to generate and manage Nx workspaces by adhering to established workspace conventions.",
"url": "https://github.com/jogelin/huge-nx"
},
{
"name": "nx-github-pages",
"description": "A small Nx plugin to make deploying static projects to GitHub Pages easy.",
"url": "https://github.com/agentender/nx-github-pages"
}
]
+2 -2
View File
@@ -90,7 +90,7 @@ Learn more at [enterprise](/enterprise).
Nx Cloud has evolved a lot since we first released it in 2020, and is changing even more in 2023. To better adapt to Nx Cloud being a critical CI tool, we changed our pricing model to be more consistent and predictable for CI workloads.
Nx Clouds previous pricing was based on time savings from Nx Cloud, which made sense when Nx Cloud was strictly a distributed caching service. The [new pricing model](/pricing) is based entirely on the number of CI pipeline executions per calendar month. We believe this is a simpler and more transparent model that should help you predict your costs far more easily.
Nx Clouds previous pricing was based on time savings from Nx Cloud, which made sense when Nx Cloud was strictly a distributed caching service. The [new pricing model](https://nx.app/pricing) is based entirely on the number of CI pipeline executions per calendar month. We believe this is a simpler and more transparent model that should help you predict your costs far more easily.
![](/blog/images/2023-04-19/bodyimg8.webp)
@@ -100,7 +100,7 @@ Finally, the **Enterprise plan** is for companies that want full control over wh
All these changes should allow developers to choose the plan that best suits their needs and budget more easily, ensuring a seamless and transparent experience regarding pricing and subscription management.
Learn more at [https://nx.dev/pricing](/pricing).
Learn more at [https://nx.app/pricing](https://nx.app/pricing).
## Coming Next
-1
View File
@@ -4,7 +4,6 @@ slug: 'reliable-ci-a-new-execution-model-fixing-both-flakiness-and-slowness'
authors: [Victor Savkin]
cover_image: '/blog/images/2024-03-21/featured_img.png'
tags: [nx, nx-cloud, releases]
pinned: true
---
The proverbial slow and flaky CI isnt the failure of the developers or even the testing tools. Its the failure of the CI execution model we relied on for the last 20 years.
@@ -1,18 +0,0 @@
---
title: 'Nx Enterprise Podcast Episode 1: Hicham El Hammouchi'
slug: 'hicham-el-hammouchi-podcast-1'
authors: ['Zack DeRose']
tags: [podcast]
cover_image: /blog/images/2024-06-18/ep-1-hicham.png
podcastYoutubeId: 8iiLB_2djZ8
podcastSpotifyId: 24yagCNpu9EGj0fCwSDQkj
podcastAmazonUrl: https://music.amazon.com/podcasts/a221fdad-36fd-4695-a5b4-038d7b99d284/episodes/899a2e4c-2e56-4dfa-a3e3-e69eb216f2b0/the-enterprise-software-podcast-by-nx-the-enterprise-software-podcast-by-nx-1-hicham-el-hamouchi
podcastAppleUrl: https://podcasters.spotify.com/pod/show/enterprise-software/episodes/The-Enterprise-Software-Podcast-By-Nx-1--Hicham-El-Hamouchi-e2l0302
podcastIHeartUrl: https://www.iheart.com/podcast/269-the-enterprise-software-po-186891508/episode/the-enterprise-software-podcast-by-nx-186891511/
---
In this episode, Zack DeRose from Nx chats with Hicham El Hammouchi, a veteran in enterprise software. Hicham dives into his background, sharing his career journey and the wealth of experience he's gathered along the way.
They tackle the tough challenges that companies face in software development. Hicham offers practical insights and real-life examples from his own career, making complex issues easier to understand. He also shares some tried-and-true strategies for overcoming these hurdles, emphasizing the importance of teamwork and effective project management.
As the chat continues, Zack and Hicham explore the latest tech trends and innovations that are shaking up the industry. Hicham's forward-thinking views provide a sneak peek into the future of enterprise software. They also discuss detailed case studies of successful projects, highlighting the importance of staying focused on customer needs and feedback.
@@ -1,18 +0,0 @@
---
title: 'Nx Enterprise Podcast Episode 2: Tine Kondo'
slug: 'tine-kondo-podcast-2'
authors: ['Zack DeRose']
tags: [podcast]
cover_image: /blog/images/2024-07-19/ep-2-tine.png
podcastYoutubeId: Nzf3BmymfEo
podcastSpotifyId: 0CCQaWCln7rvwkkVvsyxsk
podcastAmazonUrl: https://music.amazon.com/podcasts/a221fdad-36fd-4695-a5b4-038d7b99d284/episodes/53934cd9-c521-441e-8523-8b947ed207ca/the-enterprise-software-podcast-by-nx-the-enterprise-software-podcast-by-nx-2-tine-kondo
podcastAppleUrl: https://podcasts.apple.com/us/podcast/the-enterprise-software-podcast-by-nx-2-tine-kondo/id1752704996?i=1000662764990
podcastIHeartUrl: https://www.iheart.com/podcast/269-the-enterprise-software-po-186891508/episode/the-enterprise-software-podcast-by-nx-197335640/
---
In this episode, welcome Nx Champion and Nx Expert, Tine Kondo. Our discussion highlights how Nx is poised to make an impact in the Java space.
We touch on the difficulties larger organizations face when merging PRs in a timely manner, emphasizing how a monorepo alleviates the headache of coordinating multiple PRs across various repositories, and share firsthand experiences and frustrations with traditional multi-repo setups, underscoring the benefits of a unified approach.
In particular, Nx's new plugin: [@nx/gradle](/nx-api/gradle) is of interest, and Tine provides some valuable insight on the impact this plugin can make, as well as the importance for Maven support.
+176
View File
@@ -0,0 +1,176 @@
---
title: 'Nx 19.5: StackBlitz, New Features, And More!!'
slug: 'nx-19-5-adds-stackblitz-new-features-and-more'
authors: ['Zack DeRose']
cover_image: '/blog/images/2024-07-25/nx-19-5-thumbnail.png'
tags: [nx, release]
---
## Table of Contents
In this blog post:
- [StackBlitz Support](#stackblitz-support)
- [NEW: Pattern Support for `targetDefaults`](#new-pattern-support-for-targetdefaults)
- [NEW: Individual Targets Can Now Opt Out of Parallelism](#new-individual-targets-can-now-opt-out-of-parallelism)
- [Experimental: Gradle Test Atomization](#experimental-gradle-test-atomization)
- [Support for React 19 (rc) and Angular 18.1](#support-for-react-19-rc-and-angular-181)
- [NEW: Nx Cloud Hobby Tier](#new-nx-cloud-hobby-tier)
- [Automatically Update Nx](#automatically-update-nx)
- [Monorepo World Conference Speakers to Be Announced Soon!!](#monorepo-world-conference-speakers-to-be-announced-soon)
## StackBlitz Support!!
Nx now has support for Stackblitz. This means that you can create a StackBlitz with a whole Nx Workspace inside of it and run all Nx capabilities from their embedded terminal.
[![Nx Workspace in Stackblitz](/blog/images/2024-07-25/react-app-in-stackblitz.jpg)](https://stackblitz.com/edit/stackblitz-webcontainer-api-starter-cwruaw?file=apps%2Freact-app%2Fsrc%2Fapp%2Fapp.tsx)
[Check out the example](https://stackblitz.com/edit/stackblitz-webcontainer-api-starter-cwruaw?file=apps%2Freact-app%2Fsrc%2Fapp%2Fapp.tsx) above - you can use the standard command in the terminal:
```shell
> nx serve react-app
```
to develop your application inside of the stackblitz.
We're excited for this as it opens up many interesting use-cases, including easier ways of sharing examples, better opportunities for reproduction of issues or bugs, and potential for us to use embedded examples in our documentation in the future.
Web Assembly (or WASM) is the underlying technology being used here, so in addition to stackblitz any other tools built on a node context should now work as well.
## NEW: Pattern Support for `targetDefaults`
When using the Atomizer features of plugins like [`@nx/playwright`](/nx-api/playwright) and [`@nx/cypress`](/nx-api/cypress), you end up creating tasks with dynamic but predictable names.
![Tasks Created With Atomizer](/blog/images/2024-07-25/e2e-task-names.jpg)
Notice how the `e2e-ci--src/example.spec.ts` and `e2e-ci--src/test.spec.ts` tasks here are created by the `@nx/playwright` plugin based on the playwright spec files present in your workspace.
We've now added pattern matching to `targetDefaults` task names as a way to target these dynamic tasks.
The following will set all such tasks to depend on their `build` task:
```json
{
"targetDefaults": {
"e2e-ci--**/*": {
"dependsOn": ["build"]
}
}
}
```
Note that our plugins will set sensible configurations here out of the box when creating new workspaces using our generators.
Read more about [reducing configuration with `targetDefaults`](/recipes/running-tasks/reduce-repetitive-configuration#reduce-configuration-with-targetdefaults) and [how you can define task pipelines with `targetDefaults`](/features/run-tasks#defining-a-task-pipeline).
## NEW: Individual Targets Can Now Opt Out of Parallelism
One of our goals in changing the landscape of CI is to make CI more declarative - defining the what rather than the how.
Unfortunately, to accomodate for port collisions on end-to-end test, we've long adjusted our generated ci script to look like this:
```yml
- run: npx nx affected -t lint test build
- run: npx nx affected --parallel 1 -t e2e-ci
```
This is unfortunately more imperative, as we are starting to give instructions on how to run and order your CI, rather than defining what to run in our CI. In addition, these instructions will still run `lint`, `test`, and `build` targets first and wait until they all complete before then running `e2e-ci` - which leaves some inefficiencies on the table.
To address this, all tasks now support a `parallelism` property. By setting this property to `false`, you can now inform the Nx task runner to not attempt to run a certain task in parallel. This way we can define parallelism as a property of a task, and move our task running to be more declarative again.
Both our `@nx/playwright` and `@nx/cypress` plugins will now set `targetDefaults` for atomized tests to turn off `parallelism` from now on:
```json
{
// ...
"targetDefaults": {
"e2e-**/*": {
// ...
"parallelism": false
}
}
}
```
This way we can simply run the command:
```shell
> nx run-many --targets=lint,test,e2e-ci,build
```
And in CI, Nx Agents will allow all tasks to run in parallel on the same machine, except for the atomized end-to-end tasks, which will only run in isolation.
Learn more about how you can [Parallelize Tasks Across Multiple Machines Using Nx Agents](/ci/intro/tutorials/github-actions#parallelize-tasks-across-multiple-machines-using-nx-agents):
{% youtube
src="https://youtu.be/0YxcxIR7QU0"
title="Faster e2e Tests!"
width="100%" /%}
## Experimental: Gradle Test Atomization
Our new [`@nx/gradle` plugin](/nx-api/gradle) now supports Test Atomization out of the box.
![Gradle Atomized](/blog/images/2024-07-25/gradle-atomized.jpg)
This means that as you add tests in your gradle projects, we'll automatically create a new task for each test class, allowing you to distribute the execution of these tasks in your CI pipeline, just like with our `@nx/playwright` and `@nx/cypress` plugins.
## Support for React 19 (rc) and Angular 18.1
Nx 19.5 adds support for the React 19 release candidate and updated our Angular package to support the latest Angular minor version: 18.1.
When using our `@nx/angular` package, we'll automatically update you to the latest angular version when you run our migration. Using the `--interactive` flag you can choose to opt in or out of the latest Angular version:
```shell
> nx migrate latest --interactive
✔ Do you want to update to TypeScript v5.5? (Y/n) · true
✔ Do you want to update the Angular version to v18.1? (Y/n) · true
Fetching @angular/core@18.1.2
NX The migrate command has run successfully.
```
Our `@nx/react` package will now create new React applications using version 18.3, and we now support the new experimental `reactCompiler`. Users can install the [`babel-plugin-react-compiler` package](https://www.npmjs.com/package/babel-plugin-react-compiler) and you can follow [this guide for how to enable it with Nx](/recipes/react/react-compiler#react-compiler-with-nx).
Note that due to the extent of breaking changes coming with React 19, we will not be providing a automated migration to React 19 via [`nx migrate`](/nx-api/nx/documents/migrate).
## Automatically Update Nx
As always - updating Nx and its plugins is easy as we ship an [automated migration command](/features/automate-updating-dependencies).
```shell
npx nx migrate latest
```
After updating your dependencies, run any necessary migrations.
```shell
npx nx migrate --run-migrations
```
## NEW: Nx Cloud Hobby Tier
Our new expanded Hobby Tier now adds trial support for all features AND includes credits to run Nx Agents.
Sample the entire suite of features to see its impact on your organization. Start with everything, scale when you need more.
[![Nx Cloud Tiers](/blog/images/2024-07-25/start-with-everything-scale-when-you-need.jpg)](https://nx.app/pricing#plan-details)
Checkout the [plan details page](https://nx.app/pricing#plan-details) for more info, and see how Nx Cloud can help you!
## Monorepo World Conference Speakers to Be Announced Soon!!
[![Monorepo World](/blog/images/2024-07-25/monorepo-world.jpg)](https://monorepo.world)
The [Monorepo World conference](https://monorepo.world) is coming up soon on October 7, 2024 at the Computer History museum in Mountain View, California.
[Get your tickets now](https://ti.to/nx-conf/monorepoworld2024), consider [requesting access to the invite-only Enterprise Summit on October 8](https://ti.to/nx-conf/monorepoworld2024), and be sure to stay tuned as we'll be announcing speakers soon!
## Learn more
- [Nx Docs](/getting-started/intro)
- [X/Twitter](https://twitter.com/nxdevtools) -- [LinkedIn](https://www.linkedin.com/company/nrwl/)
- [Nx GitHub](https://github.com/nrwl/nx)
- [Nx Official Discord Server](https://go.nx.dev/community)
- [Nx Youtube Channel](https://www.youtube.com/@nxdevtools)
- [Speed up your CI](https://nx.app/)
-56
View File
@@ -1,56 +0,0 @@
---
title: Introducing Explain with AI
slug: 'explain-with-ai'
authors: ['Philip Fulcher']
cover_image: '/blog/images/2024-07-29/explain-with-ai-header.avif'
tags: [nx, nx-cloud, ai, release]
pinned: true
---
It's Friday, and you absolutely, positively have to deploy to production. But you can't get CI to pass your PR. What do you do? It's an inevitable part of your life as a developer, and you've built a collection of tools to deal with it: Google, MDN, Discord, ChatGPT. We've got one more tool for your toolbox: **"Explain with AI" for [Nx Cloud](/nx-cloud)**.
## Your ticket to fast error debugging
"Explain with AI" is a new feature for all Nx Cloud Pro users that is going to help you troubleshoot those pesky failing tasks. Whenever you get an error message on CI, look for the "Explain with AI" button on the upper right-hand corner:
![Explain with AI button](/blog/images/2024-07-29/explain-with-ai-button.avif)
Once you hit that button, we collect the terminal output and other Nx task information and sprinkle some AI on top of it to give you a suggested fix. That should help you quickly get to the bottom of the issue and get back to work quickly.
![Explain with AI explaining how to resolve the CI error](/blog/images/2024-07-29/explain-with-ai-2.avif)
No more switching back and forth between a dozen tabs with different solutions. No more providing the right context for your masterfully written chat prompt. **Get your suggested fix and get back to work.**
## How can I start using this today?
![Nx Cloud organization settings section for enabling AI features](/blog/images/2024-07-29/ai-features.avif)
Here's how you get started:
- **Step 1:** Go to your [Nx Cloud](https://cloud.nx.app/) organization settings
- **Step 2:** Enable AI features
- **Step 3:** Accept the Nx Cloud AI terms and conditions.
- **Step 4:** You're all set ✨
Note that you'll need to be an organization admin for your Nx Cloud workspace to enable AI features.
{% call-to-action title="Log in to Nx Cloud" url="https://cloud.nx.app" icon="nxcloud" description="Enable AI features in your organization settings" %}
Log in to Nx Cloud
{% /call-to-action %}
### I want to try this, but I'm on the Hobby plan 🤔
If you're currently on the Hobby plan, you can start a free Pro plan trial for 14 days to try it out on your own workspace. No, we don't ask for credit cards to start a trial, so feel free to experiment!
## More to come!
This is just the first of a series of AI-powered features that we're going to be rolling out to your workspaces. We've got some cool features in the works already, which we're going to **announce publicly during the [Monorepo World](https://monorepo.world) conference in October**! So stay tuned!
## Learn more
- [Nx Docs](/getting-started/intro)
- [X/Twitter](https://twitter.com/nxdevtools) -- [LinkedIn](https://www.linkedin.com/company/nrwl/)
- [Nx GitHub](https://github.com/nrwl/nx)
- [Nx Official Discord Server](https://go.nx.dev/community)
- [Nx Youtube Channel](https://www.youtube.com/@nxdevtools)
- [Speed up your CI](https://nx.app/)
-296
View File
@@ -1,296 +0,0 @@
---
title: 'Nx 19.5 is here! Stackblitz, Bun, Incremental Builds for Vite, Gradle Test Atomizer'
slug: 'nx-19-5-adds-stackblitz-new-features-and-more'
authors: ['Zack DeRose']
cover_image: '/blog/images/2024-08-01/nx-19-5-thumbnail.png'
tags: [nx, release]
pinned: true
---
## Table of Contents
In this blog post:
- [Table of Contents](#table-of-contents)
- [Video Summary](#video-summary)
- [Announcing Nx Cloud Hobby Tier](#announcing-nx-cloud-hobby-tier)
- [StackBlitz Support](#stackblitz-support)
- [Bun and Pnpm v9 Support](#bun-and-pnpm-v9-support)
- [Local Flaky Task Detection](#local-flaky-task-detection)
- [Project Detail View Enhancements](#project-detail-view-enhancements)
- [Pattern Support for `targetDefaults`](#pattern-support-for-targetdefaults)
- [Individual Targets Can Now Opt Out of Parallelism](#individual-targets-can-now-opt-out-of-parallelism)
- [Support For Incremental Builds For Vite](#support-for-incremental-builds-for-vite)
- [Project Crystal Conversion Generators](#project-crystal-conversion-generators)
- [Gradle Composite Builds Support](#gradle-composite-builds-support)
- [Experimental: Gradle Test Atomization](#experimental-gradle-test-atomization)
- [Experimental: Nx Release Adds File Based Versioning Support](#experimental-nx-release-adds-file-based-versioning-support)
- [Support for React 19 (rc) and Angular 18.1](#support-for-react-19-rc-and-angular-181)
- [Automatically Update Nx](#automatically-update-nx)
- [Monorepo World Conference Speakers Announced!!](#monorepo-world-conference-speakers-announced)
- [Learn more](#learn-more)
## Video Summary
{% youtube
src="https://youtu.be/ER-6sKbb9ck"
title="Nx 19.5 is here! Stackblitz, Bun, AND MORE!"
width="100%" /%}
## Announcing Nx Cloud Hobby Tier
We just added a new [Hobby Tier](/pricing#plan-details) to Nx Cloud! Why is this exciting? It is completely free and contains all major features, which includes the ability to [distribute your tasks with Nx Agents](/ci/features/distribute-task-execution).
This gives you plenty of opportunities to experiment with Nx Cloud on your workspace and see its impact on your teams productivity.
[![Nx Cloud Tiers](/blog/images/2024-08-01/start-with-everything-scale-when-you-need.avif)](/pricing#plan-details)
Checkout the [plan details page](/pricing#plan-details) for more info, and see how Nx Cloud can help you! And in case you missed it, check out our latest blog on the latest Nx Cloud feature: [Explain with AI](/blog/explain-with-ai)!
## StackBlitz Support
Nx now has support for [Stackblitz](https://stackblitz.com/) (again). For a while it was not possible to use Nx on Stackblitz because we implemented some perf critical parts of Nx as native components with Rust. Huge shoutout to [LongYinan](https://github.com/Brooooooklyn) for [their amazing work of pushing napi-rs](https://napi.rs/) forward and helping us [add WebAssembly support to Nx](https://github.com/nrwl/nx/pull/22870) as well as the StackBlitz team who helped debug issues.
This means we are back and you can create a StackBlitz with a whole Nx Workspace inside it and run all Nx capabilities from their embedded terminal.
[![Nx Workspace in Stackblitz](/blog/images/2024-08-01/react-app-in-stackblitz.avif)](https://stackblitz.com/edit/stackblitz-webcontainer-api-starter-cwruaw?file=apps%2Freact-app%2Fsrc%2Fapp%2Fapp.tsx)
[Check out the example](https://stackblitz.com/edit/stackblitz-webcontainer-api-starter-cwruaw?file=apps%2Freact-app%2Fsrc%2Fapp%2Fapp.tsx) above. You can use the standard Nx commands in the Stackblitz terminal, like
```shell
nx serve react-app
```
We're excited about this as it opens up many interesting use cases, including easier ways of sharing examples, better opportunities for reproducing issues or bugs, and the potential for us to use embedded examples in our documentation in the future.
Again, special shout out to community contributor [LongYinan](https://github.com/Brooooooklyn) and [their napi-rs project](https://napi.rs/).
## Bun and Pnpm v9 Support
We've been monitoring [Bun](https://bun.sh/) for a while both as a runtime and as a package manager, and we've decided to take the first step in Bun support now by supporting [Bun as a package manager](https://bun.sh/docs/cli/install)! This means that you can now use Bun like you would use npm, pnpm, or yarn to install and manage your dependencies, and Nx will be able to correctly understand those dependencies as `externalNodes` in the Nx dependency graph.
Sending a big thank you to community contributor [Jordan Hall](https://github.com/Jordan-Hall) for completing [this work](https://github.com/nrwl/nx/pull/22602).
In addition to supporting Bun, Nx now supports the latest format of [`pnpm`](https://pnpm.io/) lockfiles which was introduced in version 9.
## Local Flaky Task Detection
Nx Cloud has long offered [flaky task detection](/ci/features/flaky-tasks) on CI, and now this capability is available **even when running them locally**.
![Local Flaky Task Warning](/blog/images/2024-08-01/flaky-task.avif)
If a task is detected as flaky during local execution, youll receive a warning. Nx identifies flaky tasks by tracking the outcomes of your tasks in relation to your source code and external dependencies. When the same code produces different results, Nx flags the task as flaky and triggers the warning.
Detecting flaky tasks in the local environment empowers developers to address issues early in the development cycle—before they affect your CI pipelines.
## Project Detail View Enhancements
As part of [project Crystal](/concepts/inferred-tasks) we've added the ability to our plugins to automatically infer tasks based on the tools and configuration files available in your workspace. As part of that we created the "project detail view", allowing you to visualize such dynamically created tasks. You can launch it by using the [Nx Console IDE plugin](/getting-started/editor-setup) or by running the command:
```shell
nx show project [projectName]
```
In this iteration we've added several enhancements to the project detail view. For one, we've added more instructions on how to discover options for the underlying tools, and included examples on how to adjust these options via your `project.json` file.
![Project Detail View Vite Serve](/blog/images/2024-08-01/project-detail-view-vite-serve.avif)
In addition, we've added a callout for tasks that [leverage the `Nx Atomizer`](/ci/features/split-e2e-tasks). Since atomizer tasks are designed to be used with [Nx Agents](/ci/features/distribute-task-execution#distribute-task-execution-nx-agents), this callout will appear in yellow to warn if your project is not yet configured to run them on CI, and you can click on this callout for an easy way to complete that setup:
![Atomizer Warning](/blog/images/2024-08-01/atomizer-warning.avif)
Clicking this button will launch the [Nx Cloud onboarding](https://cloud.nx.app) process, which will generate a PR in your repository to complete the setup.
![Connect Your Repo](/blog/images/2024-08-01/connect-a-repo.avif)
Note that the new, free [hobby tier for Nx Cloud](#new-nx-cloud-hobby-tier) includes the ability to run [Nx Agents](/ci/features/distribute-task-execution) without the need to immediately jump onto a paid plan.
## Pattern Support for `targetDefaults`
When using the [Atomizer features](/ci/features/split-e2e-tasks) of plugins like [`@nx/playwright`](/nx-api/playwright) and [`@nx/cypress`](/nx-api/cypress), you end up creating tasks with dynamic but predictable names.
![Tasks Created With Atomizer](/blog/images/2024-08-01/e2e-task-names.avif)
Notice how the `e2e-ci--src/example.spec.ts` and `e2e-ci--src/test.spec.ts` tasks here are created by the `@nx/playwright` plugin dynamically based on the playwright spec files present in your workspace.
We've now **added pattern matching** to `targetDefaults` task names as a way to target these dynamic tasks.
In the past it was difficult to customize this dynamic set of targets. But with the new support for specifying a pattern to a target name, you can now customize this set of dynamic targets all at once.
The following will set all such tasks to depend on their `build` task:
```json
{
"targetDefaults": {
"e2e-ci--**/*": {
"dependsOn": ["build"]
}
}
}
```
Note that our plugins will set sensible configurations here out of the box when creating new workspaces using our generators.
Read more about [reducing configuration with `targetDefaults`](/recipes/running-tasks/reduce-repetitive-configuration#reduce-configuration-with-targetdefaults) and [how you can define task pipelines with `targetDefaults`](/features/run-tasks#defining-a-task-pipeline).
## Individual Targets Can Now Opt Out of Parallelism
One of our goals in transforming the CI landscape is to **make CI more declarative** by focusing on defining the "what" rather than the "how."
To accommodate port collisions in end-to-end tests, we've long adjusted our generated CI script to look like this:
```yml
- run: npx nx affected -t lint test build
- run: npx nx affected --parallel 1 -t e2e-ci
```
Unfortunately, this approach is more imperative, as it instructs how to run and order your CI rather than defining what should be run. Additionally, these instructions cause `lint`, `test`, and `build` targets to run first and wait until they all complete before running `e2e-ci`, leading to inefficiencies.
To address this, all tasks now support a [`parallelism` property](/reference/project-configuration#parallelism). By setting this property to `false`, you can instruct the Nx task runner not to run a specific task in parallel. This allows us to define parallelism as a task property, making our CI configuration more declarative.
Both our `@nx/playwright` and `@nx/cypress` plugins will now automatically set `targetDefaults` for atomized tests to disable parallelism:
```json {% fileName="nx.json" %}
{
// ...
"targetDefaults": {
"e2e-**/*": {
// ...
"parallelism": false
}
}
}
```
This way we can simply run the command:
```shell
nx affected --targets=lint,test,build,e2e-ci
```
In CI, Nx Agents will allow all tasks to run in parallel on the same machine, except for the atomized end-to-end tasks, which will only run in isolation.
Learn more about how you can [Parallelize Tasks Across Multiple Machines Using Nx Agents](/ci/intro/tutorials/github-actions#parallelize-tasks-across-multiple-machines-using-nx-agents):
{% youtube
src="https://youtu.be/0YxcxIR7QU0"
title="Faster e2e Tests!"
width="100%" /%}
## Support For Incremental Builds For Vite
Nx now supports incremental builds with our [`vite` plugin](/nx-api/vite). Incremental builds in Nx workspaces allow you to build any package in your workspace individually, and will then automatically use that built artifact when then building any project or application that consumes the package. This way you can speed up your build and CI times through optimizations like [only building packages that were affected](/nx-api/nx/documents/affected), using [Nx Replay](/ci/features/remote-cache) to effortlessly cache and share your built artifacts, and allowing you to run builds of your various packages in parallel using [Nx Agents](/ci/features/distribute-task-execution).
Read more about [buildable libraries and incremental builds](/concepts/buildable-and-publishable-libraries).
## Project Crystal Conversion Generators
Since launching [Nx Project Crystal](/concepts/inferred-tasks) in Nx version 18, we've adjusted our generators to leverage these features when creating new workspaces and projects. We've now added the `convert-to-inferred` generator to give you an automated way to opt into project crystal.
To run the generator, you can run the command:
```shell
npx nx g convert-to-inferred
```
The important thing to note here is that while this generator will make adjustments to the `project.json` file of the projects you convert, the behavior of your tasks should remain the same. You can see project details via the [Nx Console](/getting-started/editor-setup) plugin of your IDE, or in a browser by running the command: `nx show project [projectName]`.
In Nx 19, we were focused on adding `convert-to-inferred` to our [Playwright](/nx-api/playwright), [Cypress](/nx-api/cypress), and [ESLint](/nx-api/eslint) plugins - where bringing the [Nx Atomizer](/ci/features/split-e2e-tasks) provided the greatest value. Since then, we've added this generator to most other plugins. Currently, our React native plugins (react native, expo, detox) are the only plugins that are outstanding, and we'll be providing `convert-to-inferred` generators here in the near future.
## Gradle Composite Builds Support
In [Nx 19.0](/blog/nx-19-release), we introduced support for Gradle through our [Gradle plugin](/nx-api/gradle). With the latest update, this plugin now also supports [Gradle Composite builds](https://docs.gradle.org/current/userguide/composite_builds.html), in addition to multi-project builds.
Gradle Composite builds are commonly used in larger workspaces to manage dependencies across multiple projects. With this new support, Nx can now leverage composite builds to enhance the Nx Task Graph. For example, consider the following `settings.gradle.kts` file:
```kotlin
rootProject.name = "app"
includeBuild("number-utils")
includeBuild("string-utils")
```
Nx will now be able to automatically determine the dependencies between the `app` project and the `number-utils` and `string-utils` workspaces:
![Gradle Composite Project Dep Graph](/blog/images/2024-08-01/gradle-composite-dep-graph.avif)
You can read more on composite builds in the [Gradle documentation](https://docs.gradle.org/current/userguide/composite_builds.html).
## Experimental: Gradle Test Atomization
The new [`@nx/gradle` plugin](/nx-api/gradle) now includes experimental support for [Test Atomization](/ci/features/split-e2e-tasks).
![Gradle Atomized](/blog/images/2024-08-01/gradle-atomized.avif)
With Test Atomization, as you add tests to your Gradle projects, Nx will automatically create a separate task for each test class. This allows you to distribute the execution of these tasks across multiple machines on CI, similar to the functionality provided by our `@nx/playwright` and `@nx/cypress` plugins.
## Experimental: Nx Release Adds File Based Versioning Support
Currently with [Nx release](/nx-api/nx/documents/release), you already have two different ways of figuring out the how to modify the current version of a package to get its updated version:
- Imperatively via the CLI/prompt by telling it your desired relative (semver keyword) or absolute (e.g. `1.2.3`) version.
- Declaratively by letting Nx inspect your git history and determine the semver bump to apply based on the conventional commits specification.
Nx release now supports an experimental third way of deriving the version bump that we call "version plans".
The idea behind version plans is that you want to track your intended version bumps alongside your changes, just like you would do with conventional commits, but you want to make this tracking independent from your actual commit data. This might be because you do not want to/cannot use the conventional commits standard in your workspace, or it could just be that you find it a cleaner approach to versioning.
Version plan files use frontmatter enhanced markdown for their contents, and can be created by hand or by leveraging the new `nx release plan` subcommand. This will guide you through creating a git-tracked file within `.nx/version-plans` that will be committed alongside your normal changes.
![Nx Release Plan Command](/blog/images/2024-08-01/nx-release-plan-command.avif)
When your team is ready to release, you can now simply run the CLI command `nx release` (or use the [powerful programmatic API](/features/manage-releases#using-the-programmatic-api-for-nx-release)) and nx will ingest all the outstanding version plan files and use the combined information to determine the resulting version for all referenced projects and/or release groups as part of the versioning, changelog generation, and publishing steps. (You can also run the command `nx release version` if all you want to do is update the version!)
![Nx Release With Plans](/blog/images/2024-08-01/nx-release-with-plans.avif)
Anyone who has used the tools "Changesets" or "Beachball" will be familiar with the concept of file based versioning, but with Nx release you get the power to combine one or more of the above mentioned versioning strategies all within the same workspace for different release groups, and we are really excited to keep building out this feature set and mark it as non-experimental (by fully documenting it) very soon. To learn more about the other features of [Nx Release in the meantime, check out our docs](/features/manage-releases).
## Support for React 19 (rc) and Angular 18.1
Nx 19.5 adds support for the React 19 release candidate and updated our Angular package to support the latest Angular minor version: 18.1.
When using our `@nx/angular` package, we'll automatically update you to the latest angular version when you run our migration. Using the `--interactive` flag you can choose to opt in or out of the latest Angular version:
```shell
nx migrate latest --interactive
✔ Do you want to update to TypeScript v5.5? (Y/n) · true
✔ Do you want to update the Angular version to v18.1? (Y/n) · true
Fetching @angular/core@18.1.2
NX The migrate command has run successfully.
```
Our `@nx/react` package will now create new React applications using version 18.3, and we now support the new experimental `reactCompiler`. Users can install the [`babel-plugin-react-compiler` package](https://www.npmjs.com/package/babel-plugin-react-compiler) and you can follow [this guide for how to enable it with Nx](/recipes/react/react-compiler#react-compiler-with-nx).
Note that due to the extent of breaking changes coming with React 19, we will not be providing a automated migration to React 19 via [`nx migrate`](/nx-api/nx/documents/migrate).
## Automatically Update Nx
As always - updating Nx and its plugins is easy as we ship an [automated migration command](/features/automate-updating-dependencies).
```shell
npx nx migrate latest
```
After updating your dependencies, run any necessary migrations.
```shell
npx nx migrate --run-migrations
```
## Monorepo World Conference Speakers Announced!!
[![Monorepo World](/blog/images/2024-08-01/monorepo-world.avif)](https://monorepo.world)
The [Monorepo World conference](https://monorepo.world) is coming up soon on October 7, 2024 at the Computer History museum in Mountain View, California.
[Get your tickets now](https://ti.to/nx-conf/monorepoworld2024), consider [requesting access to the invite-only Enterprise Summit on October 8](https://ti.to/nx-conf/monorepoworld2024), and be sure to check out our [list of speakers](https://monorepo.world/#speakers-title) that was just published!
## Learn more
- [Nx Docs](/getting-started/intro)
- [X/Twitter](https://twitter.com/nxdevtools) -- [LinkedIn](https://www.linkedin.com/company/nrwl/)
- [Nx GitHub](https://github.com/nrwl/nx)
- [Nx Official Discord Server](https://go.nx.dev/community)
- [Nx Youtube Channel](https://www.youtube.com/@nxdevtools)
- [Speed up your CI](https://nx.app/)
@@ -1,16 +0,0 @@
---
title: 'Nx Enterprise Podcast Episode 3: Ahmed Elsakaan'
slug: 'ahmed-elsakaan-podcast-3'
authors: ['Zack DeRose']
tags: [podcast]
cover_image: /blog/images/2024-08-14/ep-3-ahmed.png
podcastYoutubeId: l_b6EOXqYRg
podcastSpotifyId: 4d4oE8B3y9BmECZ3P4uvDP
podcastAmazonUrl: https://music.amazon.com/podcasts/a221fdad-36fd-4695-a5b4-038d7b99d284/episodes/28209cf9-1b88-48b5-a798-7b24c843e9b1/the-enterprise-software-podcast-by-nx-the-enterprise-software-podcast-by-nx-3-ahmed-elsakaan
podcastAppleUrl: https://podcasts.apple.com/us/podcast/the-enterprise-software-podcast-by-nx-3-ahmed-elsakaan/id1752704996?i=1000665363260
podcastIHeartUrl: https://www.iheart.com/podcast/269-the-enterprise-software-po-186891508/episode/the-enterprise-software-podcast-by-nx-205664230/
---
In this episode we welcome Nx Champion and creator of [noodle](https://noodle.run) and [OrbitKit](https://orbitkit.dev/): Ahmed Elsakaan.
As a monorepo enthusiast, we explore Ahmed's thoughts on monorepos and how these tools can add value to developers - both in the space of setting up your monorepo (like Nx does) and in the space of creating reusable customizable modules (like OrbitKit is attempting).
@@ -1,16 +0,0 @@
---
title: 'Nx Enterprise Podcast Episode 4: Cvent Platform Architecture Panel'
slug: 'cvent-podcast-3'
authors: ['Zack DeRose']
tags: [podcast]
cover_image: /blog/images/2024-08-21/ep-4-cvent.png
podcastYoutubeId: _7uK1V_xu9k
podcastSpotifyId: 1zWuMFxcnGy90AN41gkodx
podcastAmazonUrl: https://music.amazon.com/podcasts/a221fdad-36fd-4695-a5b4-038d7b99d284/episodes/7e19eb25-76f9-4d1e-89c0-c2fd1f585f9b/the-enterprise-software-podcast-by-nx-the-enterprise-software-podcast-by-nx-4-cvent-platform-architect-panel
podcastAppleUrl: https://podcasts.apple.com/us/podcast/the-enterprise-software-podcast-by-nx-4-cvent/id1752704996?i=1000666133320
podcastIHeartUrl: https://www.iheart.com/podcast/269-the-enterprise-software-po-186891508/episode/the-enterprise-software-podcast-by-nx-207751657/
---
In this edition of the Nx Enterprise Podcast, Zack sits down with a panel of Platform Architects from the event platform company, [Cvent](https://www.cvent.com/).
The panel, featuring Youssef Taghlabi, Kevin O'Brien, Josh Lartz, and Ladi Kobiti, dives into their approach to platform engineering—focusing on how they empower teams across their organization and the critical role Nx plays in achieving those goals.
@@ -1,10 +0,0 @@
---
title: How to Fast-Track Your PRs with Trunk.io | Nx Live
slug: nx-live-trunk-io
authors: ['Zack DeRose']
tags: [livestream]
cover_image: /blog/images/2024-08-29/nx-live-trunk.png
youtubeUrl: https://youtube.com/live/E8Gh-Vkxok0
---
In this episode of Nx Live, Zack sits down with David from [Trunk.io](https://trunk.io) to explore hands-on examples of how to fast-track your PRs using Nx and Trunk Merge Queues. They also discuss the latest [first-class support for Nx](https://docs.trunk.io/merge-queue/parallel-queues/nx) recently added to Trunk, demonstrating how these tools can streamline your development workflow.
-6
View File
@@ -52,11 +52,5 @@
"image": "/blog/images/Jeff Cross.jpeg",
"twitter": "jeffbcross",
"github": "jeffbcross"
},
{
"name": "Philip Fulcher",
"image": "/blog/images/Philip Fulcher.jpeg",
"twitter": "philipjfulcher",
"github": "philipjfulcher"
}
]
Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 921 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

+6 -12
View File
@@ -1,24 +1,18 @@
# Nx 19.5 Adds StackBlitz, New Features, And More!!
[![Nx 19.5 Adds StackBlitz, New Features, And More!!](/blog/images/2024-08-01/nx-19-5-thumbnail.png)](/blog/nx-19-5-adds-stackblitz-new-features-and-more)
[![Nx 19.5 Adds StackBlitz, New Features, And More!!](/blog/images/2024-07-25/nx-19-5-thumbnail.png)](/blog/nx-19-5-adds-stackblitz-new-features-and-more)
Read the [blogpost](/blog/nx-19-5-adds-stackblitz-new-features-and-more) for full details.
## Features
{% cards cols="2" %}
{% card title="Announcing Nx Cloud Hobby Tier" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#announcing-nx-cloud-hobby-tier" /%}
{% card title="StackBlitz Support" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#stackblitz-support" /%}
{% card title="Bun and Pnpm v9 Support" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#bun-and-pnpm-v9-support" /%}
{% card title="Local Flaky Task Detection" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#local-flaky-task-detection" /%}
{% card title="Project Detail View Enhancements" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#project-detail-view-enhancements" /%}
{% card title="Pattern Support for `targetDefaults`" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#pattern-support-for-targetdefaults" /%}
{% card title="Individual Targets Can Now Opt Out of Parallelism" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#individual-targets-can-now-opt-out-of-parallelism" /%}
{% card title="Support For Incremental Builds For Vite" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#support-for-incremental-builds-for-vite" /%}
{% card title="Project Crystal Conversion Generators" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#project-crystal-conversion-generators" /%}
{% card title="Gradle Composite Builds Support" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#gradle-composite-builds-support" /%}
{% card title="Stackblitz Support" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#stackblitz-support" /%}
{% card title="NEW: Pattern Support for `targetDefaults`" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#new-pattern-support-for-targetdefaults" /%}
{% card title="NEW: Individual Targets Can Now Opt Out of Parallelism" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#new-individual-targets-can-now-opt-out-of-parallelism" /%}
{% card title="Experimental: Gradle Test Atomization" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#experimental-gradle-test-atomization" /%}
{% card title="Experimental: Nx Release Adds Version Plans Support" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#experimental-nx-release-adds-version-plans-support" /%}
{% card title="Support for React 19 (rc) and Angular 18.1" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#support-for-react-19-rc-and-angular-181" /%}
{% card title="NEW: Nx Cloud Hobby Tier" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#new-nx-cloud-hobby-tier" /%}
{% card title="Monorepo World Conference Speakers to Be Announced Soon!!" type="document" url="/blog/nx-19-5-adds-stackblitz-new-features-and-more#monorepo-world-conference-speakers-to-be-announced-soon" /%}
{% /cards %}
-15
View File
@@ -1,15 +0,0 @@
# Nx 19.6
## Features
{% cards cols="2" %}
{% card title="Explain with AI" type="document" url="/ci/features/explain-with-ai" /%}
{% card title="File-Based Versioning for Nx Release (Version Plans)" type="document" url="/recipes/nx-release/file-based-versioning-version-plans" /%}
{% card title="Migrate to Inferred Tasks (Project Crystal)" type="document" url="/recipes/running-tasks/convert-to-inferred" /%}
{% card title="Angular 18.2.0 Support" type="document" url="https://github.com/nrwl/nx/pull/27379" /%}
{% card title="Storybook 8 Support" type="document" url="https://github.com/nrwl/nx/pull/27214" /%}
{% /cards %}
## Breaking Changes
We updated `webpack-dev-server` to v5 in `@nx/webpack`, which comes with some breaking changes. See their [migration guide](https://github.com/webpack/webpack-dev-server/blob/master/migration-v5.md) for more details.
-8
View File
@@ -117,14 +117,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### files
Type: `string`
+1 -1
View File
@@ -121,7 +121,7 @@ Generate a 'src/' directory for Next.js
Type: `string`
Choices: [github, gitlab, azure, bitbucket-pipelines, circleci, skip, yes]
Choices: [github, circleci, gitlab, azure, bitbucket-pipelines, skip, yes]
Which CI provider would you like to use?
-6
View File
@@ -149,12 +149,6 @@ Type: `string`
Use the provided versions for packages instead of the ones calculated by the migrator (e.g., --to="@nx/react@16.0.0,@nx/js@16.0.0")
### verbose
Type: `boolean`
Prints additional information about the commands (e.g., stack traces)
### version
Type: `boolean`
-14
View File
@@ -37,12 +37,6 @@ Type: `boolean`
Show help
### printConfig
Type: `string`
Print the resolved nx release configuration that would be used for the current command and then exit
### projects
Type: `string`
@@ -315,14 +309,6 @@ Type: `string`
Exclude certain projects from being processed
##### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
##### first-release
Type: `boolean`
-8
View File
@@ -119,14 +119,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### graph
Type: `string`
-8
View File
@@ -87,14 +87,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### graph
Type: `string`
-35
View File
@@ -1,35 +0,0 @@
# Interface: GraphJson
The data type that `nx graph --file graph.json` or `nx build --graph graph.json` contains
## Table of contents
### Properties
- [graph](../../devkit/documents/GraphJson#graph): ProjectGraph
- [taskPlans](../../devkit/documents/GraphJson#taskplans): Record<string, string[]>
- [tasks](../../devkit/documents/GraphJson#tasks): TaskGraph
## Properties
### graph
**graph**: [`ProjectGraph`](../../devkit/documents/ProjectGraph)
The project graph
---
### taskPlans
`Optional` **taskPlans**: `Record`\<`string`, `string`[]\>
The plans for hashing a task in the task graph
---
### tasks
`Optional` **tasks**: [`TaskGraph`](../../devkit/documents/TaskGraph)
A graph of tasks populated with `nx build --graph`
@@ -28,16 +28,13 @@ Nx.json configuration
- [implicitDependencies](../../devkit/documents/NxJsonConfiguration#implicitdependencies): ImplicitDependencyEntry<T>
- [installation](../../devkit/documents/NxJsonConfiguration#installation): NxInstallationConfiguration
- [namedInputs](../../devkit/documents/NxJsonConfiguration#namedinputs): Object
- [neverConnectToCloud](../../devkit/documents/NxJsonConfiguration#neverconnecttocloud): boolean
- [nxCloudAccessToken](../../devkit/documents/NxJsonConfiguration#nxcloudaccesstoken): string
- [nxCloudEncryptionKey](../../devkit/documents/NxJsonConfiguration#nxcloudencryptionkey): string
- [nxCloudId](../../devkit/documents/NxJsonConfiguration#nxcloudid): string
- [nxCloudUrl](../../devkit/documents/NxJsonConfiguration#nxcloudurl): string
- [parallel](../../devkit/documents/NxJsonConfiguration#parallel): number
- [plugins](../../devkit/documents/NxJsonConfiguration#plugins): PluginConfiguration[]
- [pluginsConfig](../../devkit/documents/NxJsonConfiguration#pluginsconfig): Record<string, Record<string, unknown>>
- [release](../../devkit/documents/NxJsonConfiguration#release): NxReleaseConfiguration
- [sync](../../devkit/documents/NxJsonConfiguration#sync): NxSyncConfiguration
- [targetDefaults](../../devkit/documents/NxJsonConfiguration#targetdefaults): TargetDefaults
- [tasksRunnerOptions](../../devkit/documents/NxJsonConfiguration#tasksrunneroptions): Object
- [useDaemonProcess](../../devkit/documents/NxJsonConfiguration#usedaemonprocess): boolean
@@ -166,14 +163,6 @@ Named inputs targets can refer to reduce duplication
---
### neverConnectToCloud
`Optional` **neverConnectToCloud**: `boolean`
Set this to false to disable connection to Nx Cloud
---
### nxCloudAccessToken
`Optional` **nxCloudAccessToken**: `string`
@@ -191,15 +180,6 @@ Specifies the encryption key used to encrypt artifacts data before sending it to
---
### nxCloudId
`Optional` **nxCloudId**: `string`
If specified Nx will use nx-cloud by default with the given cloud id.
To use a different runner that accepts a cloud id, define it in [tasksRunnerOptions](../../devkit/documents/NxJsonConfiguration#tasksrunneroptions)
---
### nxCloudUrl
`Optional` **nxCloudUrl**: `string`
@@ -241,14 +221,6 @@ Configuration for `nx release` (versioning and publishing of applications and li
---
### sync
`Optional` **sync**: `NxSyncConfiguration`
Configuration for the `nx sync` command.
---
### targetDefaults
`Optional` **targetDefaults**: [`TargetDefaults`](../../devkit/documents/TargetDefaults)
-1
View File
@@ -35,7 +35,6 @@ It only uses language primitives and immutable objects
- [FileData](../../devkit/documents/FileData)
- [FileMap](../../devkit/documents/FileMap)
- [GeneratorsJson](../../devkit/documents/GeneratorsJson)
- [GraphJson](../../devkit/documents/GraphJson)
- [Hash](../../devkit/documents/Hash)
- [HasherContext](../../devkit/documents/HasherContext)
- [ImplicitJsonSubsetDependency](../../devkit/documents/ImplicitJsonSubsetDependency)
@@ -23,7 +23,6 @@ Target's configuration
- [options](../../devkit/documents/TargetConfiguration#options): T
- [outputs](../../devkit/documents/TargetConfiguration#outputs): string[]
- [parallelism](../../devkit/documents/TargetConfiguration#parallelism): boolean
- [syncGenerators](../../devkit/documents/TargetConfiguration#syncgenerators): string[]
## Properties
@@ -120,12 +119,3 @@ caching engine.
Whether this target can be run in parallel with other tasks
Default is true
---
### syncGenerators
`Optional` **syncGenerators**: `string`[]
List of generators to run before the target to ensure the workspace
is up to date.
-40
View File
@@ -26,17 +26,14 @@ use ProjectsConfigurations or NxJsonConfiguration
- [implicitDependencies](../../devkit/documents/Workspace#implicitdependencies): ImplicitDependencyEntry<string[] | "\*">
- [installation](../../devkit/documents/Workspace#installation): NxInstallationConfiguration
- [namedInputs](../../devkit/documents/Workspace#namedinputs): Object
- [neverConnectToCloud](../../devkit/documents/Workspace#neverconnecttocloud): boolean
- [nxCloudAccessToken](../../devkit/documents/Workspace#nxcloudaccesstoken): string
- [nxCloudEncryptionKey](../../devkit/documents/Workspace#nxcloudencryptionkey): string
- [nxCloudId](../../devkit/documents/Workspace#nxcloudid): string
- [nxCloudUrl](../../devkit/documents/Workspace#nxcloudurl): string
- [parallel](../../devkit/documents/Workspace#parallel): number
- [plugins](../../devkit/documents/Workspace#plugins): PluginConfiguration[]
- [pluginsConfig](../../devkit/documents/Workspace#pluginsconfig): Record<string, Record<string, unknown>>
- [projects](../../devkit/documents/Workspace#projects): Record<string, ProjectConfiguration>
- [release](../../devkit/documents/Workspace#release): NxReleaseConfiguration
- [sync](../../devkit/documents/Workspace#sync): NxSyncConfiguration
- [targetDefaults](../../devkit/documents/Workspace#targetdefaults): TargetDefaults
- [tasksRunnerOptions](../../devkit/documents/Workspace#tasksrunneroptions): Object
- [useDaemonProcess](../../devkit/documents/Workspace#usedaemonprocess): boolean
@@ -206,18 +203,6 @@ Named inputs targets can refer to reduce duplication
---
### neverConnectToCloud
`Optional` **neverConnectToCloud**: `boolean`
Set this to false to disable connection to Nx Cloud
#### Inherited from
[NxJsonConfiguration](../../devkit/documents/NxJsonConfiguration).[neverConnectToCloud](../../devkit/documents/NxJsonConfiguration#neverconnecttocloud)
---
### nxCloudAccessToken
`Optional` **nxCloudAccessToken**: `string`
@@ -243,19 +228,6 @@ Specifies the encryption key used to encrypt artifacts data before sending it to
---
### nxCloudId
`Optional` **nxCloudId**: `string`
If specified Nx will use nx-cloud by default with the given cloud id.
To use a different runner that accepts a cloud id, define it in [tasksRunnerOptions](../../devkit/documents/NxJsonConfiguration#tasksrunneroptions)
#### Inherited from
[NxJsonConfiguration](../../devkit/documents/NxJsonConfiguration).[nxCloudId](../../devkit/documents/NxJsonConfiguration#nxcloudid)
---
### nxCloudUrl
`Optional` **nxCloudUrl**: `string`
@@ -329,18 +301,6 @@ Configuration for `nx release` (versioning and publishing of applications and li
---
### sync
`Optional` **sync**: `NxSyncConfiguration`
Configuration for the `nx sync` command.
#### Inherited from
[NxJsonConfiguration](../../devkit/documents/NxJsonConfiguration).[sync](../../devkit/documents/NxJsonConfiguration#sync)
---
### targetDefaults
`Optional` **targetDefaults**: [`TargetDefaults`](../../devkit/documents/TargetDefaults)
+66 -66
View File
@@ -207,6 +207,28 @@
"path": "/ci/features/distribute-task-execution",
"tags": []
},
{
"id": "nx-cloud-ai",
"name": "Nx Cloud AI",
"description": "Learn how to enable AI features in Nx Cloud, and what features it enables",
"mediaImage": "",
"file": "nx-cloud/features/ai-features",
"itemList": [],
"isExternal": false,
"path": "/ci/features/nx-cloud-ai",
"tags": []
},
{
"id": "dynamic-agents",
"name": "Dynamically Allocate Agents",
"description": "Learn how to dynamically allocate agents based on the size of a PR, keeping the balance of speed and cost.",
"mediaImage": "",
"file": "nx-cloud/features/dynamic-agents",
"itemList": [],
"isExternal": false,
"path": "/ci/features/dynamic-agents",
"tags": []
},
{
"id": "split-e2e-tasks",
"name": "Automatically Split E2E Tasks (Atomizer)",
@@ -228,28 +250,6 @@
"isExternal": false,
"path": "/ci/features/flaky-tasks",
"tags": []
},
{
"id": "dynamic-agents",
"name": "Dynamically Allocate Agents",
"description": "Learn how to dynamically allocate agents based on the size of a PR, keeping the balance of speed and cost.",
"mediaImage": "",
"file": "nx-cloud/features/dynamic-agents",
"itemList": [],
"isExternal": false,
"path": "/ci/features/dynamic-agents",
"tags": []
},
{
"id": "explain-with-ai",
"name": "Explain With AI",
"description": "",
"mediaImage": "",
"file": "nx-cloud/features/explain-with-ai",
"itemList": [],
"isExternal": false,
"path": "/ci/features/explain-with-ai",
"tags": []
}
],
"isExternal": false,
@@ -289,6 +289,28 @@
"path": "/ci/features/distribute-task-execution",
"tags": []
},
"/ci/features/nx-cloud-ai": {
"id": "nx-cloud-ai",
"name": "Nx Cloud AI",
"description": "Learn how to enable AI features in Nx Cloud, and what features it enables",
"mediaImage": "",
"file": "nx-cloud/features/ai-features",
"itemList": [],
"isExternal": false,
"path": "/ci/features/nx-cloud-ai",
"tags": []
},
"/ci/features/dynamic-agents": {
"id": "dynamic-agents",
"name": "Dynamically Allocate Agents",
"description": "Learn how to dynamically allocate agents based on the size of a PR, keeping the balance of speed and cost.",
"mediaImage": "",
"file": "nx-cloud/features/dynamic-agents",
"itemList": [],
"isExternal": false,
"path": "/ci/features/dynamic-agents",
"tags": []
},
"/ci/features/split-e2e-tasks": {
"id": "split-e2e-tasks",
"name": "Automatically Split E2E Tasks (Atomizer)",
@@ -311,28 +333,6 @@
"path": "/ci/features/flaky-tasks",
"tags": []
},
"/ci/features/dynamic-agents": {
"id": "dynamic-agents",
"name": "Dynamically Allocate Agents",
"description": "Learn how to dynamically allocate agents based on the size of a PR, keeping the balance of speed and cost.",
"mediaImage": "",
"file": "nx-cloud/features/dynamic-agents",
"itemList": [],
"isExternal": false,
"path": "/ci/features/dynamic-agents",
"tags": []
},
"/ci/features/explain-with-ai": {
"id": "explain-with-ai",
"name": "Explain With AI",
"description": "",
"mediaImage": "",
"file": "nx-cloud/features/explain-with-ai",
"itemList": [],
"isExternal": false,
"path": "/ci/features/explain-with-ai",
"tags": []
},
"/ci/concepts": {
"id": "concepts",
"name": "Concepts",
@@ -383,17 +383,6 @@
"isExternal": false,
"path": "/ci/concepts/cache-security",
"tags": []
},
{
"id": "nx-cloud-ai",
"name": "Nx Cloud AI",
"description": "Learn how to enable AI features in Nx Cloud, and what features it enables",
"mediaImage": "",
"file": "nx-cloud/concepts/ai-features",
"itemList": [],
"isExternal": false,
"path": "/ci/concepts/nx-cloud-ai",
"tags": []
}
],
"isExternal": false,
@@ -444,17 +433,6 @@
"path": "/ci/concepts/cache-security",
"tags": []
},
"/ci/concepts/nx-cloud-ai": {
"id": "nx-cloud-ai",
"name": "Nx Cloud AI",
"description": "Learn how to enable AI features in Nx Cloud, and what features it enables",
"mediaImage": "",
"file": "nx-cloud/concepts/ai-features",
"itemList": [],
"isExternal": false,
"path": "/ci/concepts/nx-cloud-ai",
"tags": []
},
"/ci/recipes": {
"id": "recipes",
"name": "Recipes",
@@ -2019,6 +1997,17 @@
"isExternal": false,
"path": "/ci/troubleshooting/ci-execution-failed",
"tags": []
},
{
"id": "explain-with-ai",
"name": "Explain With AI",
"description": "",
"mediaImage": "",
"file": "nx-cloud/troubleshooting/explain-with-ai",
"itemList": [],
"isExternal": false,
"path": "/ci/troubleshooting/explain-with-ai",
"tags": []
}
],
"isExternal": false,
@@ -2035,5 +2024,16 @@
"isExternal": false,
"path": "/ci/troubleshooting/ci-execution-failed",
"tags": []
},
"/ci/troubleshooting/explain-with-ai": {
"id": "explain-with-ai",
"name": "Explain With AI",
"description": "",
"mediaImage": "",
"file": "nx-cloud/troubleshooting/explain-with-ai",
"itemList": [],
"isExternal": false,
"path": "/ci/troubleshooting/explain-with-ai",
"tags": []
}
}
+67 -89
View File
@@ -8,7 +8,7 @@
"itemList": [
{
"id": "getting-started",
"name": "Extending Nx with Plugins",
"name": "Getting Started with Plugins",
"description": "Learn how to extend Nx by creating and releasing your own Nx plugin.",
"mediaImage": "",
"file": "shared/plugins/intro",
@@ -24,7 +24,7 @@
},
"/extending-nx/intro/getting-started": {
"id": "getting-started",
"name": "Extending Nx with Plugins",
"name": "Getting Started with Plugins",
"description": "Learn how to extend Nx by creating and releasing your own Nx plugin.",
"mediaImage": "",
"file": "shared/plugins/intro",
@@ -35,31 +35,31 @@
},
"/extending-nx/tutorials": {
"id": "tutorials",
"name": "Tutorials",
"name": "5 Min Tutorials",
"description": "Get started with plugins",
"mediaImage": "",
"file": "",
"itemList": [
{
"id": "organization-specific-plugin",
"name": "Enforce Organizational Best Practices",
"id": "create-plugin",
"name": "Create a Local Plugin",
"description": "",
"mediaImage": "",
"file": "shared/plugins/organization-specific-plugin",
"file": "shared/plugins/create-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/tutorials/organization-specific-plugin",
"path": "/extending-nx/tutorials/create-plugin",
"tags": []
},
{
"id": "tooling-plugin",
"name": "Create a Tooling Plugin",
"id": "publish-plugin",
"name": "Maintain a Published Plugin",
"description": "",
"mediaImage": "",
"file": "shared/plugins/tooling-plugin",
"file": "shared/plugins/maintain-published-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/tutorials/tooling-plugin",
"path": "/extending-nx/tutorials/publish-plugin",
"tags": []
}
],
@@ -67,26 +67,26 @@
"path": "/extending-nx/tutorials",
"tags": []
},
"/extending-nx/tutorials/organization-specific-plugin": {
"id": "organization-specific-plugin",
"name": "Enforce Organizational Best Practices",
"/extending-nx/tutorials/create-plugin": {
"id": "create-plugin",
"name": "Create a Local Plugin",
"description": "",
"mediaImage": "",
"file": "shared/plugins/organization-specific-plugin",
"file": "shared/plugins/create-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/tutorials/organization-specific-plugin",
"path": "/extending-nx/tutorials/create-plugin",
"tags": []
},
"/extending-nx/tutorials/tooling-plugin": {
"id": "tooling-plugin",
"name": "Create a Tooling Plugin",
"/extending-nx/tutorials/publish-plugin": {
"id": "publish-plugin",
"name": "Maintain a Published Plugin",
"description": "",
"mediaImage": "",
"file": "shared/plugins/tooling-plugin",
"file": "shared/plugins/maintain-published-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/tutorials/tooling-plugin",
"path": "/extending-nx/tutorials/publish-plugin",
"tags": []
},
"/extending-nx/recipes": {
@@ -96,6 +96,28 @@
"mediaImage": "",
"file": "",
"itemList": [
{
"id": "local-executors",
"name": "Write a Simple Executor",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/local-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/local-executors",
"tags": []
},
{
"id": "compose-executors",
"name": "Compose Executors",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/compose-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/compose-executors",
"tags": []
},
{
"id": "local-generators",
"name": "Write a Simple Generator",
@@ -162,28 +184,6 @@
"path": "/extending-nx/recipes/migration-generators",
"tags": ["create-your-own-plugin"]
},
{
"id": "local-executors",
"name": "Write a Simple Executor",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/local-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/local-executors",
"tags": []
},
{
"id": "compose-executors",
"name": "Compose Executors",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/compose-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/compose-executors",
"tags": []
},
{
"id": "create-preset",
"name": "Create a Preset",
@@ -208,7 +208,7 @@
},
{
"id": "project-graph-plugins",
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/project-graph-plugins",
@@ -216,23 +216,34 @@
"isExternal": false,
"path": "/extending-nx/recipes/project-graph-plugins",
"tags": ["create-your-own-plugin", "explore-graph", "inferred-tasks"]
},
{
"id": "publish-plugin",
"name": "Publish a Plugin",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/publish-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/publish-plugin",
"tags": ["create-your-own-plugin"]
}
],
"isExternal": false,
"path": "/extending-nx/recipes",
"tags": []
},
"/extending-nx/recipes/local-executors": {
"id": "local-executors",
"name": "Write a Simple Executor",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/local-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/local-executors",
"tags": []
},
"/extending-nx/recipes/compose-executors": {
"id": "compose-executors",
"name": "Compose Executors",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/compose-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/compose-executors",
"tags": []
},
"/extending-nx/recipes/local-generators": {
"id": "local-generators",
"name": "Write a Simple Generator",
@@ -299,28 +310,6 @@
"path": "/extending-nx/recipes/migration-generators",
"tags": ["create-your-own-plugin"]
},
"/extending-nx/recipes/local-executors": {
"id": "local-executors",
"name": "Write a Simple Executor",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/local-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/local-executors",
"tags": []
},
"/extending-nx/recipes/compose-executors": {
"id": "compose-executors",
"name": "Compose Executors",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/compose-executors",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/compose-executors",
"tags": []
},
"/extending-nx/recipes/create-preset": {
"id": "create-preset",
"name": "Create a Preset",
@@ -345,7 +334,7 @@
},
"/extending-nx/recipes/project-graph-plugins": {
"id": "project-graph-plugins",
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/project-graph-plugins",
@@ -353,16 +342,5 @@
"isExternal": false,
"path": "/extending-nx/recipes/project-graph-plugins",
"tags": ["create-your-own-plugin", "explore-graph", "inferred-tasks"]
},
"/extending-nx/recipes/publish-plugin": {
"id": "publish-plugin",
"name": "Publish a Plugin",
"description": "",
"mediaImage": "",
"file": "shared/recipes/plugins/publish-plugin",
"itemList": [],
"isExternal": false,
"path": "/extending-nx/recipes/publish-plugin",
"tags": ["create-your-own-plugin"]
}
}
+152 -296
View File
@@ -652,14 +652,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Faster Builds with Module Federation",
"path": "/concepts/module-federation/faster-builds-with-module-federation",
@@ -857,14 +849,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Faster Builds with Module Federation",
"path": "/concepts/module-federation/faster-builds-with-module-federation",
@@ -900,14 +884,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Faster Builds with Module Federation",
"path": "/concepts/module-federation/faster-builds-with-module-federation",
@@ -1114,6 +1090,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Run Custom Commands",
"path": "/recipes/running-tasks/run-commands-executor",
@@ -1161,30 +1145,6 @@
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Skip Task Caching",
"path": "/recipes/running-tasks/skipping-cache",
"id": "skipping-cache",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Migrate to Inferred Tasks (Project Crystal)",
"path": "/recipes/running-tasks/convert-to-inferred",
"id": "convert-to-inferred",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
],
"disableCollapsible": false
@@ -1962,22 +1922,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "File Based Versioning (Version Plans)",
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"id": "file-based-versioning-version-plans",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Custom Registries",
"path": "/recipes/nx-release/configure-custom-registries",
@@ -2018,6 +1962,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Changelog Format",
"path": "/recipes/nx-release/configure-changelog-format",
@@ -2128,6 +2080,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Run Custom Commands",
"path": "/recipes/running-tasks/run-commands-executor",
@@ -2175,30 +2135,6 @@
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Skip Task Caching",
"path": "/recipes/running-tasks/skipping-cache",
"id": "skipping-cache",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Migrate to Inferred Tasks (Project Crystal)",
"path": "/recipes/running-tasks/convert-to-inferred",
"id": "convert-to-inferred",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
],
"disableCollapsible": false
@@ -2227,6 +2163,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Run Custom Commands",
"path": "/recipes/running-tasks/run-commands-executor",
@@ -2275,30 +2219,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Change Cache Location",
"path": "/recipes/running-tasks/change-cache-location",
"id": "change-cache-location",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Skip Task Caching",
"path": "/recipes/running-tasks/skipping-cache",
"id": "skipping-cache",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Migrate to Inferred Tasks (Project Crystal)",
"path": "/recipes/running-tasks/convert-to-inferred",
"id": "convert-to-inferred",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Adopting Nx",
"path": "/recipes/adopting-nx",
@@ -3705,22 +3625,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "File Based Versioning (Version Plans)",
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"id": "file-based-versioning-version-plans",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Custom Registries",
"path": "/recipes/nx-release/configure-custom-registries",
@@ -3761,6 +3665,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Changelog Format",
"path": "/recipes/nx-release/configure-changelog-format",
@@ -3804,22 +3716,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "File Based Versioning (Version Plans)",
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"id": "file-based-versioning-version-plans",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Custom Registries",
"path": "/recipes/nx-release/configure-custom-registries",
@@ -3860,6 +3756,14 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Configure Changelog Format",
"path": "/recipes/nx-release/configure-changelog-format",
@@ -4994,7 +4898,7 @@
"isExternal": false,
"children": [
{
"name": "Extending Nx with Plugins",
"name": "Getting Started with Plugins",
"path": "/extending-nx/intro/getting-started",
"id": "getting-started",
"isExternal": false,
@@ -5005,7 +4909,7 @@
"disableCollapsible": false
},
{
"name": "Extending Nx with Plugins",
"name": "Getting Started with Plugins",
"path": "/extending-nx/intro/getting-started",
"id": "getting-started",
"isExternal": false,
@@ -5013,23 +4917,23 @@
"disableCollapsible": false
},
{
"name": "Tutorials",
"name": "5 Min Tutorials",
"path": "/extending-nx/tutorials",
"id": "tutorials",
"isExternal": false,
"children": [
{
"name": "Enforce Organizational Best Practices",
"path": "/extending-nx/tutorials/organization-specific-plugin",
"id": "organization-specific-plugin",
"name": "Create a Local Plugin",
"path": "/extending-nx/tutorials/create-plugin",
"id": "create-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Create a Tooling Plugin",
"path": "/extending-nx/tutorials/tooling-plugin",
"id": "tooling-plugin",
"name": "Maintain a Published Plugin",
"path": "/extending-nx/tutorials/publish-plugin",
"id": "publish-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5038,17 +4942,17 @@
"disableCollapsible": false
},
{
"name": "Enforce Organizational Best Practices",
"path": "/extending-nx/tutorials/organization-specific-plugin",
"id": "organization-specific-plugin",
"name": "Create a Local Plugin",
"path": "/extending-nx/tutorials/create-plugin",
"id": "create-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Create a Tooling Plugin",
"path": "/extending-nx/tutorials/tooling-plugin",
"id": "tooling-plugin",
"name": "Maintain a Published Plugin",
"path": "/extending-nx/tutorials/publish-plugin",
"id": "publish-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5059,6 +4963,22 @@
"id": "recipes",
"isExternal": false,
"children": [
{
"name": "Write a Simple Executor",
"path": "/extending-nx/recipes/local-executors",
"id": "local-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Compose Executors",
"path": "/extending-nx/recipes/compose-executors",
"id": "compose-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Write a Simple Generator",
"path": "/extending-nx/recipes/local-generators",
@@ -5107,22 +5027,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Write a Simple Executor",
"path": "/extending-nx/recipes/local-executors",
"id": "local-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Compose Executors",
"path": "/extending-nx/recipes/compose-executors",
"id": "compose-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Create a Preset",
"path": "/extending-nx/recipes/create-preset",
@@ -5140,24 +5044,32 @@
"disableCollapsible": false
},
{
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"path": "/extending-nx/recipes/project-graph-plugins",
"id": "project-graph-plugins",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Publish a Plugin",
"path": "/extending-nx/recipes/publish-plugin",
"id": "publish-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
],
"disableCollapsible": false
},
{
"name": "Write a Simple Executor",
"path": "/extending-nx/recipes/local-executors",
"id": "local-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Compose Executors",
"path": "/extending-nx/recipes/compose-executors",
"id": "compose-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Write a Simple Generator",
"path": "/extending-nx/recipes/local-generators",
@@ -5206,22 +5118,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Write a Simple Executor",
"path": "/extending-nx/recipes/local-executors",
"id": "local-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Compose Executors",
"path": "/extending-nx/recipes/compose-executors",
"id": "compose-executors",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Create a Preset",
"path": "/extending-nx/recipes/create-preset",
@@ -5239,20 +5135,12 @@
"disableCollapsible": false
},
{
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"path": "/extending-nx/recipes/project-graph-plugins",
"id": "project-graph-plugins",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Publish a Plugin",
"path": "/extending-nx/recipes/publish-plugin",
"id": "publish-plugin",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
]
},
@@ -5413,17 +5301,9 @@
"disableCollapsible": false
},
{
"name": "Automatically Split E2E Tasks (Atomizer)",
"path": "/ci/features/split-e2e-tasks",
"id": "split-e2e-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Identify and Re-run Flaky Tasks",
"path": "/ci/features/flaky-tasks",
"id": "flaky-tasks",
"name": "Nx Cloud AI",
"path": "/ci/features/nx-cloud-ai",
"id": "nx-cloud-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5437,9 +5317,17 @@
"disableCollapsible": false
},
{
"name": "Explain With AI",
"path": "/ci/features/explain-with-ai",
"id": "explain-with-ai",
"name": "Automatically Split E2E Tasks (Atomizer)",
"path": "/ci/features/split-e2e-tasks",
"id": "split-e2e-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Identify and Re-run Flaky Tasks",
"path": "/ci/features/flaky-tasks",
"id": "flaky-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5472,17 +5360,9 @@
"disableCollapsible": false
},
{
"name": "Automatically Split E2E Tasks (Atomizer)",
"path": "/ci/features/split-e2e-tasks",
"id": "split-e2e-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Identify and Re-run Flaky Tasks",
"path": "/ci/features/flaky-tasks",
"id": "flaky-tasks",
"name": "Nx Cloud AI",
"path": "/ci/features/nx-cloud-ai",
"id": "nx-cloud-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5496,9 +5376,17 @@
"disableCollapsible": false
},
{
"name": "Explain With AI",
"path": "/ci/features/explain-with-ai",
"id": "explain-with-ai",
"name": "Automatically Split E2E Tasks (Atomizer)",
"path": "/ci/features/split-e2e-tasks",
"id": "split-e2e-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Identify and Re-run Flaky Tasks",
"path": "/ci/features/flaky-tasks",
"id": "flaky-tasks",
"isExternal": false,
"children": [],
"disableCollapsible": false
@@ -5540,14 +5428,6 @@
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Nx Cloud AI",
"path": "/ci/concepts/nx-cloud-ai",
"id": "nx-cloud-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
],
"disableCollapsible": false
@@ -5584,14 +5464,6 @@
"children": [],
"disableCollapsible": false
},
{
"name": "Nx Cloud AI",
"path": "/ci/concepts/nx-cloud-ai",
"id": "nx-cloud-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Recipes",
"path": "/ci/recipes",
@@ -6735,6 +6607,14 @@
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Explain With AI",
"path": "/ci/troubleshooting/explain-with-ai",
"id": "explain-with-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
],
"disableCollapsible": false
@@ -6746,6 +6626,14 @@
"isExternal": false,
"children": [],
"disableCollapsible": false
},
{
"name": "Explain With AI",
"path": "/ci/troubleshooting/explain-with-ai",
"id": "explain-with-ai",
"isExternal": false,
"children": [],
"disableCollapsible": false
}
]
},
@@ -6843,14 +6731,6 @@
"isExternal": false,
"disableCollapsible": false
},
{
"id": "module-federation-dev-ssr",
"path": "/nx-api/angular/executors/module-federation-dev-ssr",
"name": "module-federation-dev-ssr",
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "application",
"path": "/nx-api/angular/executors/application",
@@ -6890,6 +6770,14 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "module-federation-dev-ssr",
"path": "/nx-api/angular/executors/module-federation-dev-ssr",
"name": "module-federation-dev-ssr",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
@@ -7339,14 +7227,6 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "convert-to-inferred",
"path": "/nx-api/detox/generators/convert-to-inferred",
"name": "convert-to-inferred",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
@@ -7755,14 +7635,6 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "convert-to-inferred",
"path": "/nx-api/expo/generators/convert-to-inferred",
"name": "convert-to-inferred",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
@@ -8075,9 +7947,9 @@
"disableCollapsible": false
},
{
"id": "typescript-sync",
"path": "/nx-api/js/generators/typescript-sync",
"name": "typescript-sync",
"id": "sync",
"path": "/nx-api/js/generators/sync",
"name": "sync",
"children": [],
"isExternal": false,
"disableCollapsible": false
@@ -9337,14 +9209,6 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "convert-to-inferred",
"path": "/nx-api/react-native/generators/convert-to-inferred",
"name": "convert-to-inferred",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
@@ -9708,14 +9572,6 @@
"children": [],
"isExternal": false,
"disableCollapsible": false
},
{
"id": "migrate-8",
"path": "/nx-api/storybook/generators/migrate-8",
"name": "migrate-8",
"children": [],
"isExternal": false,
"disableCollapsible": false
}
],
"isExternal": false,
+14 -50
View File
@@ -98,15 +98,6 @@
"path": "/nx-api/angular/executors/module-federation-dev-server",
"type": "executor"
},
"/nx-api/angular/executors/module-federation-dev-ssr": {
"description": "The module-federation-ssr-dev-server executor is reserved exclusively for use with host SSR Module Federation applications. It allows the user to specify which remote applications should be served with the host.",
"file": "generated/packages/angular/executors/module-federation-dev-ssr.json",
"hidden": false,
"name": "module-federation-dev-ssr",
"originalFilePath": "/packages/angular/src/executors/module-federation-ssr-dev-server/schema.json",
"path": "/nx-api/angular/executors/module-federation-dev-ssr",
"type": "executor"
},
"/nx-api/angular/executors/application": {
"description": "Builds an Angular application using [esbuild](https://esbuild.github.io/) with integrated SSR and prerendering capabilities. _Note: this is only supported in Angular versions >= 17.0.0_.",
"file": "generated/packages/angular/executors/application.json",
@@ -151,6 +142,15 @@
"originalFilePath": "/packages/angular/src/builders/webpack-server/schema.json",
"path": "/nx-api/angular/executors/webpack-server",
"type": "executor"
},
"/nx-api/angular/executors/module-federation-dev-ssr": {
"description": "Serves host [Module Federation](https://module-federation.io/) applications ([webpack](https://webpack.js.org/)-based) that use SSR allowing to specify which remote applications should be served with the host.",
"file": "generated/packages/angular/executors/module-federation-dev-ssr.json",
"hidden": false,
"name": "module-federation-dev-ssr",
"originalFilePath": "/packages/angular/src/builders/module-federation-dev-ssr/schema.json",
"path": "/nx-api/angular/executors/module-federation-dev-ssr",
"type": "executor"
}
},
"generators": {
@@ -607,15 +607,6 @@
"originalFilePath": "/packages/detox/src/generators/application/schema.json",
"path": "/nx-api/detox/generators/application",
"type": "generator"
},
"/nx-api/detox/generators/convert-to-inferred": {
"description": "Convert existing Detox project(s) using `@nx/detox:*` executors to use `@nx/detox/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/detox/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/detox/src/generators/convert-to-inferred/schema.json",
"path": "/nx-api/detox/generators/convert-to-inferred",
"type": "generator"
}
},
"path": "/nx-api/detox"
@@ -1000,15 +991,6 @@
"originalFilePath": "/packages/expo/src/generators/component/schema.json",
"path": "/nx-api/expo/generators/component",
"type": "generator"
},
"/nx-api/expo/generators/convert-to-inferred": {
"description": "Convert existing Expo project(s) using `@nx/expo:*` executors to use `@nx/expo/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/expo/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/expo/src/generators/convert-to-inferred/schema.json",
"path": "/nx-api/expo/generators/convert-to-inferred",
"type": "generator"
}
},
"path": "/nx-api/expo"
@@ -1283,13 +1265,13 @@
"path": "/nx-api/js/generators/setup-build",
"type": "generator"
},
"/nx-api/js/generators/typescript-sync": {
"/nx-api/js/generators/sync": {
"description": "Synchronize TypeScript project references based on the project graph",
"file": "generated/packages/js/generators/typescript-sync.json",
"file": "generated/packages/js/generators/sync.json",
"hidden": true,
"name": "typescript-sync",
"originalFilePath": "/packages/js/src/generators/typescript-sync/schema.json",
"path": "/nx-api/js/generators/typescript-sync",
"name": "sync",
"originalFilePath": "/packages/js/src/generators/sync/schema.json",
"path": "/nx-api/js/generators/sync",
"type": "generator"
}
},
@@ -2571,15 +2553,6 @@
"originalFilePath": "/packages/react-native/src/generators/web-configuration/schema.json",
"path": "/nx-api/react-native/generators/web-configuration",
"type": "generator"
},
"/nx-api/react-native/generators/convert-to-inferred": {
"description": "Convert existing React Native project(s) using `@nx/react-native:*` executors to use `@nx/react-native/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/react-native/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/react-native/src/generators/convert-to-inferred/schema.json",
"path": "/nx-api/react-native/generators/convert-to-inferred",
"type": "generator"
}
},
"path": "/nx-api/react-native"
@@ -2929,15 +2902,6 @@
"originalFilePath": "/packages/storybook/src/generators/migrate-7/schema.json",
"path": "/nx-api/storybook/generators/migrate-7",
"type": "generator"
},
"/nx-api/storybook/generators/migrate-8": {
"description": "Migrate to Storybook version 8.",
"file": "generated/packages/storybook/generators/migrate-8.json",
"hidden": false,
"name": "migrate-8",
"originalFilePath": "/packages/storybook/src/generators/migrate-8/schema.json",
"path": "/nx-api/storybook/generators/migrate-8",
"type": "generator"
}
},
"path": "/nx-api/storybook"
+66 -198
View File
@@ -888,17 +888,6 @@
"path": "/concepts/module-federation/module-federation-and-nx",
"tags": ["module-federation", "angular", "react"]
},
{
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"description": "",
"mediaImage": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"itemList": [],
"isExternal": false,
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"tags": ["module-federation", "angular", "react"]
},
{
"id": "faster-builds-with-module-federation",
"name": "Faster Builds with Module Federation",
@@ -1170,17 +1159,6 @@
"path": "/concepts/module-federation/module-federation-and-nx",
"tags": ["module-federation", "angular", "react"]
},
{
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"description": "",
"mediaImage": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"itemList": [],
"isExternal": false,
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"tags": ["module-federation", "angular", "react"]
},
{
"id": "faster-builds-with-module-federation",
"name": "Faster Builds with Module Federation",
@@ -1230,17 +1208,6 @@
"path": "/concepts/module-federation/module-federation-and-nx",
"tags": ["module-federation", "angular", "react"]
},
"/concepts/module-federation/nx-module-federation-technical-overview": {
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"description": "",
"mediaImage": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"itemList": [],
"isExternal": false,
"path": "/concepts/module-federation/nx-module-federation-technical-overview",
"tags": ["module-federation", "angular", "react"]
},
"/concepts/module-federation/faster-builds-with-module-federation": {
"id": "faster-builds-with-module-federation",
"name": "Faster Builds with Module Federation",
@@ -1521,6 +1488,17 @@
"path": "/recipes/running-tasks/defining-task-pipeline",
"tags": ["run-tasks"]
},
{
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
{
"id": "run-commands-executor",
"name": "Run Custom Commands",
@@ -1586,39 +1564,6 @@
"isExternal": false,
"path": "/recipes/running-tasks/reduce-repetitive-configuration",
"tags": []
},
{
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
{
"id": "skipping-cache",
"name": "Skip Task Caching",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/skipping-cache",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/skipping-cache",
"tags": []
},
{
"id": "convert-to-inferred",
"name": "Migrate to Inferred Tasks (Project Crystal)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/convert-to-inferred",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/convert-to-inferred",
"tags": ["inferred-tasks", "automate-updating-dependencies"]
}
],
"isExternal": false,
@@ -2681,28 +2626,6 @@
"path": "/recipes/nx-release/automatically-version-with-conventional-commits",
"tags": ["nx-release"]
},
{
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
{
"id": "file-based-versioning-version-plans",
"name": "File Based Versioning (Version Plans)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/file-based-versioning-version-plans",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"tags": ["nx-release"]
},
{
"id": "configure-custom-registries",
"name": "Configure Custom Registries",
@@ -2758,6 +2681,17 @@
"path": "/recipes/nx-release/update-local-registry-setup",
"tags": ["nx-release"]
},
{
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
{
"id": "configure-changelog-format",
"name": "Configure Changelog Format",
@@ -2909,6 +2843,17 @@
"path": "/recipes/running-tasks/defining-task-pipeline",
"tags": ["run-tasks"]
},
{
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
{
"id": "run-commands-executor",
"name": "Run Custom Commands",
@@ -2974,39 +2919,6 @@
"isExternal": false,
"path": "/recipes/running-tasks/reduce-repetitive-configuration",
"tags": []
},
{
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
{
"id": "skipping-cache",
"name": "Skip Task Caching",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/skipping-cache",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/skipping-cache",
"tags": []
},
{
"id": "convert-to-inferred",
"name": "Migrate to Inferred Tasks (Project Crystal)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/convert-to-inferred",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/convert-to-inferred",
"tags": ["inferred-tasks", "automate-updating-dependencies"]
}
],
"isExternal": false,
@@ -3046,6 +2958,17 @@
"path": "/recipes/running-tasks/defining-task-pipeline",
"tags": ["run-tasks"]
},
"/recipes/running-tasks/change-cache-location": {
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
"/recipes/running-tasks/run-commands-executor": {
"id": "run-commands-executor",
"name": "Run Custom Commands",
@@ -3112,39 +3035,6 @@
"path": "/recipes/running-tasks/reduce-repetitive-configuration",
"tags": []
},
"/recipes/running-tasks/change-cache-location": {
"id": "change-cache-location",
"name": "Change Cache Location",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/change-cache-location",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/change-cache-location",
"tags": []
},
"/recipes/running-tasks/skipping-cache": {
"id": "skipping-cache",
"name": "Skip Task Caching",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/skipping-cache",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/skipping-cache",
"tags": []
},
"/recipes/running-tasks/convert-to-inferred": {
"id": "convert-to-inferred",
"name": "Migrate to Inferred Tasks (Project Crystal)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/running-tasks/convert-to-inferred",
"itemList": [],
"isExternal": false,
"path": "/recipes/running-tasks/convert-to-inferred",
"tags": ["inferred-tasks", "automate-updating-dependencies"]
},
"/recipes/adopting-nx": {
"id": "adopting-nx",
"name": "Adopting Nx",
@@ -5071,28 +4961,6 @@
"path": "/recipes/nx-release/automatically-version-with-conventional-commits",
"tags": ["nx-release"]
},
{
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
{
"id": "file-based-versioning-version-plans",
"name": "File Based Versioning (Version Plans)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/file-based-versioning-version-plans",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"tags": ["nx-release"]
},
{
"id": "configure-custom-registries",
"name": "Configure Custom Registries",
@@ -5148,6 +5016,17 @@
"path": "/recipes/nx-release/update-local-registry-setup",
"tags": ["nx-release"]
},
{
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
{
"id": "configure-changelog-format",
"name": "Configure Changelog Format",
@@ -5208,28 +5087,6 @@
"path": "/recipes/nx-release/automatically-version-with-conventional-commits",
"tags": ["nx-release"]
},
"/recipes/nx-release/customize-conventional-commit-types": {
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
"/recipes/nx-release/file-based-versioning-version-plans": {
"id": "file-based-versioning-version-plans",
"name": "File Based Versioning (Version Plans)",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/file-based-versioning-version-plans",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/file-based-versioning-version-plans",
"tags": ["nx-release"]
},
"/recipes/nx-release/configure-custom-registries": {
"id": "configure-custom-registries",
"name": "Configure Custom Registries",
@@ -5285,6 +5142,17 @@
"path": "/recipes/nx-release/update-local-registry-setup",
"tags": ["nx-release"]
},
"/recipes/nx-release/customize-conventional-commit-types": {
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"description": "",
"mediaImage": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"itemList": [],
"isExternal": false,
"path": "/recipes/nx-release/customize-conventional-commit-types",
"tags": ["nx-release"]
},
"/recipes/nx-release/configure-changelog-format": {
"id": "configure-changelog-format",
"name": "Configure Changelog Format",
+24 -73
View File
@@ -123,21 +123,21 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/run",
"file": "generated/packages/generated/packages/nx/documents/run",
"id": "run",
"name": "run",
"path": "/nx-api/nx/documents/run"
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/run-many",
"file": "generated/packages/generated/packages/nx/documents/run-many",
"id": "run-many",
"name": "run-many",
"path": "/nx-api/nx/documents/run-many"
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/affected",
"file": "generated/packages/generated/packages/nx/documents/affected",
"id": "affected",
"name": "affected",
"path": "/nx-api/nx/documents/affected"
@@ -230,14 +230,14 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/connect-to-nx-cloud",
"file": "generated/packages/generated/packages/nx/documents/connect-to-nx-cloud",
"id": "connect-to-nx-cloud",
"name": "connect-to-nx-cloud",
"path": "/nx-api/nx/documents/connect-to-nx-cloud"
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/reset",
"file": "generated/packages/generated/packages/nx/documents/reset",
"id": "reset",
"name": "reset",
"path": "/nx-api/nx/documents/reset"
@@ -269,12 +269,12 @@
"description": "",
"file": "shared/recipes/plugins/project-graph-plugins",
"id": "project-graph-plugins",
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"path": "/extending-nx/recipes/project-graph-plugins"
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/dep-graph",
"file": "generated/packages/generated/packages/nx/documents/dep-graph",
"id": "dep-graph",
"name": "graph",
"path": "/nx-api/nx/documents/dep-graph"
@@ -339,7 +339,7 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/generate",
"file": "generated/packages/generated/packages/nx/documents/generate",
"id": "generate",
"name": "generate",
"path": "/nx-api/nx/documents/generate"
@@ -353,13 +353,6 @@
"name": "Automate Updating Dependencies",
"path": "/features/automate-updating-dependencies"
},
{
"description": "",
"file": "shared/recipes/running-tasks/convert-to-inferred",
"id": "convert-to-inferred",
"name": "Migrate to Inferred Tasks (Project Crystal)",
"path": "/recipes/running-tasks/convert-to-inferred"
},
{
"description": "",
"file": "shared/recipes/tips-n-tricks/keep-nx-versions-in-sync",
@@ -376,7 +369,7 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/migrate",
"file": "generated/packages/generated/packages/nx/documents/migrate",
"id": "migrate",
"name": "migrate",
"path": "/nx-api/nx/documents/migrate"
@@ -448,14 +441,14 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/format-check",
"file": "generated/packages/generated/packages/nx/documents/format-check",
"id": "format-check",
"name": "format:check",
"path": "/nx-api/nx/documents/format-check"
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/format-write",
"file": "generated/packages/generated/packages/nx/documents/format-write",
"id": "format-write",
"name": "format:write",
"path": "/nx-api/nx/documents/format-write"
@@ -490,20 +483,6 @@
"name": "Automatically Version with Conventional Commits",
"path": "/recipes/nx-release/automatically-version-with-conventional-commits"
},
{
"description": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types"
},
{
"description": "",
"file": "shared/recipes/nx-release/file-based-versioning-version-plans",
"id": "file-based-versioning-version-plans",
"name": "File Based Versioning (Version Plans)",
"path": "/recipes/nx-release/file-based-versioning-version-plans"
},
{
"description": "",
"file": "shared/recipes/nx-release/configure-custom-registries",
@@ -539,6 +518,13 @@
"name": "Update Your Local Registry Setup to use Nx Release",
"path": "/recipes/nx-release/update-local-registry-setup"
},
{
"description": "",
"file": "shared/recipes/nx-release/customize-conventional-commit-types",
"id": "customize-conventional-commit-types",
"name": "Customize Conventional Commit Types",
"path": "/recipes/nx-release/customize-conventional-commit-types"
},
{
"description": "",
"file": "shared/recipes/nx-release/configure-changelog-format",
@@ -555,7 +541,7 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/release",
"file": "generated/packages/generated/packages/nx/documents/release",
"id": "release",
"name": "release",
"path": "/nx-api/nx/documents/release"
@@ -599,18 +585,11 @@
"name": "Inferred Tasks",
"path": "/concepts/inferred-tasks"
},
{
"description": "",
"file": "shared/recipes/running-tasks/convert-to-inferred",
"id": "convert-to-inferred",
"name": "Migrate to Inferred Tasks (Project Crystal)",
"path": "/recipes/running-tasks/convert-to-inferred"
},
{
"description": "",
"file": "shared/recipes/plugins/project-graph-plugins",
"id": "project-graph-plugins",
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"path": "/extending-nx/recipes/project-graph-plugins"
}
],
@@ -647,19 +626,12 @@
"description": "",
"file": "shared/recipes/plugins/project-graph-plugins",
"id": "project-graph-plugins",
"name": "Infer Tasks or Projects",
"name": "Modify the Project Graph",
"path": "/extending-nx/recipes/project-graph-plugins"
},
{
"description": "",
"file": "shared/recipes/plugins/publish-plugin",
"id": "publish-plugin",
"name": "Publish a Plugin",
"path": "/extending-nx/recipes/publish-plugin"
},
{
"description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
"file": "generated/packages/angular/documents/nx-devkit-angular-devkit",
"file": "generated/packages/generated/packages/angular/documents/nx-devkit-angular-devkit",
"id": "nx-devkit-angular-devkit",
"name": "Nx Devkit and Angular Devkit",
"path": "/nx-api/angular/documents/nx-devkit-angular-devkit"
@@ -703,13 +675,6 @@
"name": "Module Federation and Nx",
"path": "/concepts/module-federation/module-federation-and-nx"
},
{
"description": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview"
},
{
"description": "",
"file": "shared/concepts/module-federation/faster-builds",
@@ -747,13 +712,6 @@
"name": "Module Federation and Nx",
"path": "/concepts/module-federation/module-federation-and-nx"
},
{
"description": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview"
},
{
"description": "",
"file": "shared/concepts/module-federation/faster-builds",
@@ -784,13 +742,6 @@
"name": "Module Federation and Nx",
"path": "/concepts/module-federation/module-federation-and-nx"
},
{
"description": "",
"file": "shared/concepts/module-federation/nx-module-federation-technical-overview",
"id": "nx-module-federation-technical-overview",
"name": "Nx Module Federation Technical Overview",
"path": "/concepts/module-federation/nx-module-federation-technical-overview"
},
{
"description": "",
"file": "shared/concepts/module-federation/faster-builds",
@@ -832,7 +783,7 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/watch",
"file": "generated/packages/generated/packages/nx/documents/watch",
"id": "watch",
"name": "watch",
"path": "/nx-api/nx/documents/watch"
@@ -1162,7 +1113,7 @@
},
{
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
"file": "generated/packages/nx/documents/connect-to-nx-cloud",
"file": "generated/packages/generated/packages/nx/documents/connect-to-nx-cloud",
"id": "connect-to-nx-cloud",
"name": "connect-to-nx-cloud",
"path": "/nx-api/nx/documents/connect-to-nx-cloud"
+13 -49
View File
@@ -93,15 +93,6 @@
"path": "angular/executors/module-federation-dev-server",
"type": "executor"
},
{
"description": "The module-federation-ssr-dev-server executor is reserved exclusively for use with host SSR Module Federation applications. It allows the user to specify which remote applications should be served with the host.",
"file": "generated/packages/angular/executors/module-federation-dev-ssr.json",
"hidden": false,
"name": "module-federation-dev-ssr",
"originalFilePath": "/packages/angular/src/executors/module-federation-ssr-dev-server/schema.json",
"path": "angular/executors/module-federation-dev-ssr",
"type": "executor"
},
{
"description": "Builds an Angular application using [esbuild](https://esbuild.github.io/) with integrated SSR and prerendering capabilities. _Note: this is only supported in Angular versions >= 17.0.0_.",
"file": "generated/packages/angular/executors/application.json",
@@ -146,6 +137,15 @@
"originalFilePath": "/packages/angular/src/builders/webpack-server/schema.json",
"path": "angular/executors/webpack-server",
"type": "executor"
},
{
"description": "Serves host [Module Federation](https://module-federation.io/) applications ([webpack](https://webpack.js.org/)-based) that use SSR allowing to specify which remote applications should be served with the host.",
"file": "generated/packages/angular/executors/module-federation-dev-ssr.json",
"hidden": false,
"name": "module-federation-dev-ssr",
"originalFilePath": "/packages/angular/src/builders/module-federation-dev-ssr/schema.json",
"path": "angular/executors/module-federation-dev-ssr",
"type": "executor"
}
],
"generators": [
@@ -598,15 +598,6 @@
"originalFilePath": "/packages/detox/src/generators/application/schema.json",
"path": "detox/generators/application",
"type": "generator"
},
{
"description": "Convert existing Detox project(s) using `@nx/detox:*` executors to use `@nx/detox/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/detox/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/detox/src/generators/convert-to-inferred/schema.json",
"path": "detox/generators/convert-to-inferred",
"type": "generator"
}
],
"githubRoot": "https://github.com/nrwl/nx/blob/master",
@@ -986,15 +977,6 @@
"originalFilePath": "/packages/expo/src/generators/component/schema.json",
"path": "expo/generators/component",
"type": "generator"
},
{
"description": "Convert existing Expo project(s) using `@nx/expo:*` executors to use `@nx/expo/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/expo/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/expo/src/generators/convert-to-inferred/schema.json",
"path": "expo/generators/convert-to-inferred",
"type": "generator"
}
],
"githubRoot": "https://github.com/nrwl/nx/blob/master",
@@ -1267,11 +1249,11 @@
},
{
"description": "Synchronize TypeScript project references based on the project graph",
"file": "generated/packages/js/generators/typescript-sync.json",
"file": "generated/packages/js/generators/sync.json",
"hidden": true,
"name": "typescript-sync",
"originalFilePath": "/packages/js/src/generators/typescript-sync/schema.json",
"path": "js/generators/typescript-sync",
"name": "sync",
"originalFilePath": "/packages/js/src/generators/sync/schema.json",
"path": "js/generators/sync",
"type": "generator"
}
],
@@ -2544,15 +2526,6 @@
"originalFilePath": "/packages/react-native/src/generators/web-configuration/schema.json",
"path": "react-native/generators/web-configuration",
"type": "generator"
},
{
"description": "Convert existing React Native project(s) using `@nx/react-native:*` executors to use `@nx/react-native/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"file": "generated/packages/react-native/generators/convert-to-inferred.json",
"hidden": false,
"name": "convert-to-inferred",
"originalFilePath": "/packages/react-native/src/generators/convert-to-inferred/schema.json",
"path": "react-native/generators/convert-to-inferred",
"type": "generator"
}
],
"githubRoot": "https://github.com/nrwl/nx/blob/master",
@@ -2899,15 +2872,6 @@
"originalFilePath": "/packages/storybook/src/generators/migrate-7/schema.json",
"path": "storybook/generators/migrate-7",
"type": "generator"
},
{
"description": "Migrate to Storybook version 8.",
"file": "generated/packages/storybook/generators/migrate-8.json",
"hidden": false,
"name": "migrate-8",
"originalFilePath": "/packages/storybook/src/generators/migrate-8/schema.json",
"path": "storybook/generators/migrate-8",
"type": "generator"
}
],
"githubRoot": "https://github.com/nrwl/nx/blob/master",
@@ -14,7 +14,6 @@ We provide a recommended version, and it is usually the latest minor version of
| Angular Version | **Nx Version _(recommended)_** | Nx Version _(range)_ |
| --------------- | ------------------------------ | ---------------------------------------- |
| ~18.2.0 | **latest** | >=19.6.0 <=latest |
| ~18.1.0 | **latest** | >=19.5.0 <=latest |
| ~18.0.0 | **latest** | >=19.1.0 <=latest |
| ~17.3.0 | **latest** | >=18.2.0 <=latest |
@@ -231,15 +231,6 @@ pnpm add [package]
nx g [package]:ng-add
```
{% /tab %}
{% tab label="bun" %}
```shell
bun add [package]
nx g [package]:ng-add
```
{% /tab %}
{% /tabs %}
@@ -1,11 +1,10 @@
{
"name": "module-federation-dev-ssr",
"implementation": "/packages/angular/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.ts",
"implementation": "/packages/angular/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.ts",
"schema": {
"$schema": "http://json-schema.org/draft-07/schema",
"title": "Module Federation SSR Dev Server Target",
"outputCapture": "direct-nodejs",
"description": "The module-federation-ssr-dev-server executor is reserved exclusively for use with host SSR Module Federation applications. It allows the user to specify which remote applications should be served with the host.",
"description": "Serves host [Module Federation](https://module-federation.io/) applications ([webpack](https://webpack.js.org/)-based) that use SSR allowing to specify which remote applications should be served with the host.",
"type": "object",
"properties": {
"browserTarget": {
@@ -66,20 +65,7 @@
},
"devRemotes": {
"type": "array",
"items": {
"oneOf": [
{ "type": "string" },
{
"type": "object",
"properties": {
"remoteName": { "type": "string" },
"configuration": { "type": "string" }
},
"required": ["remoteName"],
"additionalProperties": false
}
]
},
"items": { "type": "string" },
"description": "List of remote applications to run in development mode (i.e. using serve target).",
"x-priority": "important"
},
@@ -96,29 +82,15 @@
"pathToManifestFile": {
"type": "string",
"description": "Path to a Module Federation manifest file (e.g. `my/path/to/module-federation.manifest.json`) containing the dynamic remote applications relative to the workspace root."
},
"isInitialHost": {
"type": "boolean",
"description": "Whether the host that is running this executor is the first in the project tree to do so.",
"default": true,
"x-priority": "internal"
},
"parallel": {
"type": "number",
"description": "Max number of parallel processes for building static remotes"
},
"staticRemotesPort": {
"type": "number",
"description": "The port at which to serve the file-server for the static remotes."
}
},
"additionalProperties": false,
"required": ["browserTarget", "serverTarget"],
"presets": []
},
"description": "The module-federation-ssr-dev-server executor is reserved exclusively for use with host SSR Module Federation applications. It allows the user to specify which remote applications should be served with the host.",
"description": "Serves host [Module Federation](https://module-federation.io/) applications ([webpack](https://webpack.js.org/)-based) that use SSR allowing to specify which remote applications should be served with the host.",
"aliases": [],
"hidden": false,
"path": "/packages/angular/src/executors/module-federation-ssr-dev-server/schema.json",
"path": "/packages/angular/src/builders/module-federation-dev-ssr/schema.json",
"type": "executor"
}
@@ -6,8 +6,7 @@
"$id": "NxAngularComponentCypressSpecGenerator",
"type": "object",
"cli": "nx",
"description": "Creates a Storybook Cypress spec for a UI component that has a story.",
"x-deprecated": "Use interactionTests instead. This option will be removed in v20.",
"description": "Creates a Cypress spec for a UI component that has a story.",
"properties": {
"projectName": {
"type": "string",
@@ -27,13 +27,11 @@
},
"generateCypressSpecs": {
"type": "boolean",
"description": "Specifies whether to automatically generate `*.spec.ts` files in the Cypress e2e app generated by the `cypress-configure` generator.",
"x-deprecated": "Use interactionTests instead. This option will be removed in v20."
"description": "Specifies whether to automatically generate `*.spec.ts` files in the Cypress e2e app generated by the `cypress-configure` generator."
},
"cypressProject": {
"type": "string",
"description": "The Cypress project to generate the stories under. This is inferred from `name` by default.",
"x-deprecated": "Use interactionTests instead. This option will be removed in v20."
"description": "The Cypress project to generate the stories under. This is inferred from `name` by default."
},
"skipFormat": {
"description": "Skip formatting files.",
@@ -86,7 +86,7 @@ The `targetName`, `ciTargetName`, `componentTestingTargetName`, and `open-cypres
### Splitting E2E tasks by file
The `@nx/cypress/plugin` will automatically split your e2e tasks by file. You can read more about the Atomizer feature [here](/ci/features/split-e2e-tasks).
The `@nx/cypress/plugin` will automatically split your e2e tasks by file. You can read more about this feature [here](/ci/features/split-e2e-tasks).
To enable e2e task splitting, make sure there is a `ciWebServerCommand` property set in your `cypress.config.ts` file. It will look something like this:
@@ -1,30 +0,0 @@
{
"name": "convert-to-inferred",
"factory": "./src/generators/convert-to-inferred/convert-to-inferred",
"schema": {
"$schema": "https://json-schema.org/schema",
"$id": "NxDetoxConvertToInferred",
"description": "Convert existing Detox project(s) using `@nx/detox:*` executors to use `@nx/detox/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"title": "Convert Detox project from executor to plugin",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The project to convert from using the `@nx/detox:*` executors to use `@nx/detox/plugin`.",
"x-priority": "important"
},
"skipFormat": {
"type": "boolean",
"description": "Whether to format files at the end of the migration.",
"default": false
}
},
"presets": []
},
"description": "Convert existing Detox project(s) using `@nx/detox:*` executors to use `@nx/detox/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"implementation": "/packages/detox/src/generators/convert-to-inferred/convert-to-inferred.ts",
"aliases": [],
"hidden": false,
"path": "/packages/detox/src/generators/convert-to-inferred/schema.json",
"type": "generator"
}
@@ -35,7 +35,6 @@ It only uses language primitives and immutable objects
- [FileData](../../devkit/documents/FileData)
- [FileMap](../../devkit/documents/FileMap)
- [GeneratorsJson](../../devkit/documents/GeneratorsJson)
- [GraphJson](../../devkit/documents/GraphJson)
- [Hash](../../devkit/documents/Hash)
- [HasherContext](../../devkit/documents/HasherContext)
- [ImplicitJsonSubsetDependency](../../devkit/documents/ImplicitJsonSubsetDependency)
@@ -6,10 +6,6 @@ The rule uses the project graph to collect all the dependencies of your project,
We use the version numbers of the installed packages when checking whether the version specifier in `package.json` is correct. We do this because this is the only version for which we can "guarantee" that things work and were tested. If you specify a range outside of that version, that would mean that you are shipping potentially untested code.
{% callout type="check" title="Keep the Package Manager Lock File Up-to-Date" %}
The `@nx/dependency-checks` rule requires the presence of an up-to-date lock file in the workspace root to detect installed packages and their versions correctly. If the `package.json` file has changes that are not reflected in the lock file, make sure to perform a package installation.
{% /callout %}
## Usage
Library generators from `@nx` packages will configure this rule automatically when you opt-in for bundler/build setup. This rule is intended for publishable/buildable libraries, so it will only run if a `build` target is detected in the configuration (this name can be modified - see [options](#options)).
@@ -1,30 +0,0 @@
{
"name": "convert-to-inferred",
"factory": "./src/generators/convert-to-inferred/convert-to-inferred",
"schema": {
"$schema": "https://json-schema.org/schema",
"$id": "NxExpoConvertToInferred",
"description": "Convert existing Expo project(s) using `@nx/expo:*` executors to use `@nx/expo/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"title": "Convert Expo project from executor to plugin",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The project to convert from using the `@nx/expo:*` executors to use `@nx/expo/plugin`.",
"x-priority": "important"
},
"skipFormat": {
"type": "boolean",
"description": "Whether to format files at the end of the migration.",
"default": false
}
},
"presets": []
},
"description": "Convert existing Expo project(s) using `@nx/expo:*` executors to use `@nx/expo/plugin`. Defaults to migrating all projects. Pass '--project' to migrate only one target.",
"implementation": "/packages/expo/src/generators/convert-to-inferred/convert-to-inferred.ts",
"aliases": [],
"hidden": false,
"path": "/packages/expo/src/generators/convert-to-inferred/schema.json",
"type": "generator"
}
@@ -68,8 +68,7 @@ The `@nx/gradle` is configured in the `plugins` array in `nx.json`.
"options": {
"testTargetName": "test",
"classesTargetName": "classes",
"buildTargetName": "build",
"ciTargetName": "test-ci"
"buildTargetName": "build"
}
}
]
@@ -78,23 +77,6 @@ The `@nx/gradle` is configured in the `plugins` array in `nx.json`.
Once a Gradle configuration file has been identified, the targets are created with the name you specify under `testTargetName`, `classesTargetName` or `buildTargetName` in the `nx.json` `plugins` array. The default names for the inferred targets are `test`, `classes` and `build`.
### Splitting E2E Tests
The `@nx/gradle` plugin will automatically split your e2e tasks by file if you provide a `ciTargetName`. You can read more about the Atomizer feature [here](/ci/features/split-e2e-tasks). This will create a target with that name which can be used in CI to run the tests for each file in a distributed fashion.
```json {% fileName="nx.json" highlightLines=[6] %}
{
"plugins": [
{
"plugin": "@nx/gradle",
"options": {
"ciTargetName": "test-ci"
}
}
]
}
```
## View Inferred Tasks
To view inferred tasks for a project, open the [project details view](/features/explore-graph#explore-projects-in-your-workspace) in Nx Console or run `nx show project my-project --web` in the command line.
@@ -70,7 +70,7 @@ within the same workspace. In this case, you can configure the `@nx/jest/plugin`
### Splitting E2E Tests
If Jest is used to run E2E tests, you can enable [splitting the tasks](/ci/features/split-e2e-tasks) by file to get
improved caching, distribution, and retrying flaky tests. Enable this Atomizer feature by providing a `ciTargetName`. This will create a
improved caching, distribution, and retrying flaky tests. Enable this, by providing a `ciTargetName`. This will create a
target with that name which can be used in CI to run the tests for each file in a distributed fashion.
```json {% fileName="nx.json" %}
@@ -161,16 +161,6 @@ To run Jest tests via nx use
nx test frontend
```
### Testing Specific Files
Using a single positional argument or the `--testFile` flag will run all test files matching the regex. For more info check out the [Jest documentation](https://jestjs.io/docs/cli#jest-regexfortestfiles).
```shell
nx test frontend HomePage.tsx
# or
nx test frontend --testFile HomePage.tsx
```
### Watching for Changes
Using the `--watch` flag will run the tests whenever a file changes.
@@ -284,10 +274,9 @@ const cleanupRegisteredPaths = registerTsProject('./tsconfig.base.json');
import { yourFancyFunction } from '@some-org/my-util-library';
export default async function () {
yourFancyFunction();
// make sure to run the clean up!
cleanupRegisteredPaths();
}
// make sure to run the clean up!
cleanupRegisteredPaths();
```
If you're using `@swc/jest` and a global setup/teardown file, you have to set the `noInterop: false` and use dynamic imports within the setup function:
@@ -51,8 +51,7 @@
},
"testFile": {
"description": "The name of the file to test.",
"type": "string",
"$default": { "$source": "argv", "index": 0 }
"type": "string"
},
"tsConfig": {
"description": "The name of the Typescript configuration file.",
@@ -40,11 +40,6 @@
"x-completion-type": "directory",
"x-priority": "important"
},
"outputFileName": {
"type": "string",
"description": "The path to the main file relative to the outputPath",
"x-completion-type": "file"
},
"tsConfig": {
"type": "string",
"description": "The path to the Typescript configuration file.",
@@ -30,22 +30,10 @@
"description": "Keep existing dependencies versions",
"default": false
},
"addTsConfigBase": {
"type": "boolean",
"description": "Add a base tsconfig file to the workspace.",
"x-priority": "internal",
"default": false
},
"tsConfigName": {
"type": "string",
"description": "Customize the generated base tsconfig file name.",
"description": "Customize the generated tsconfig file name.",
"x-priority": "internal"
},
"setUpPrettier": {
"type": "boolean",
"description": "Add Prettier and corresponding configuration files.",
"x-priority": "internal",
"default": false
}
},
"presets": []
@@ -1,6 +1,6 @@
{
"name": "typescript-sync",
"factory": "./src/generators/typescript-sync/typescript-sync",
"name": "sync",
"factory": "./src/generators/sync/sync#syncGenerator",
"schema": {
"$schema": "https://json-schema.org/schema",
"$id": "action",
@@ -11,10 +11,9 @@
"presets": []
},
"description": "Synchronize TypeScript project references based on the project graph",
"alias": ["sync"],
"hidden": true,
"implementation": "/packages/js/src/generators/typescript-sync/typescript-sync.ts",
"implementation": "/packages/js/src/generators/sync/sync#syncGenerator.ts",
"aliases": [],
"path": "/packages/js/src/generators/typescript-sync/schema.json",
"path": "/packages/js/src/generators/sync/schema.json",
"type": "generator"
}
@@ -150,46 +150,6 @@ You can lint a library with the following command:
nx lint my-nest-lib
```
### Unit Test
You can run unit test for an application with the following command:
```shell
nx test my-nest-app
```
You can run unit test for a library with the following command:
```shell
nx test my-nest-lib
```
## Using CLI Plugins
Nest supports the use of various CLI plugins to enhance the development experience. Plugins can be configured via **transformers** property in NxWebpackPlugin.
As an example, to set up a [Swagger plugin](https://docs.nestjs.com/openapi/cli-plugin), modify the Nest application's Webpack configuration as follows:
```javascript
const { NxWebpackPlugin } = require('@nx/webpack');
module.exports = {
// ...
plugins: [
new NxWebpackPlugin({
// ...
transformers: [
{
name: '@nestjs/swagger/plugin',
options: {
dtoFileNameSuffix: ['.dto.ts', '.entity.ts'],
},
},
],
}),
],
};
```
## Deployment
Ensuring a smooth and reliable deployment of a Nest.js application in a production environment requires careful planning and the right strategy. Depending on your specific needs and infrastructure, you can choose from several deployment approaches. Below are four commonly used methods:
@@ -210,6 +170,20 @@ Ensuring a smooth and reliable deployment of a Nest.js application in a producti
Bundling dependencies is typically not recommended for Node applications.
{% /callout %}
### Unit Test
You can run unit test for an application with the following command:
```shell
nx test my-nest-app
```
You can run unit test for a library with the following command:
```shell
nx test my-nest-lib
```
## More Documentation
- [Using Jest](/nx-api/jest)
@@ -61,10 +61,6 @@
"default": false,
"x-priority": "internal"
},
"skipPackageManager": {
"type": "boolean",
"description": "Do not add a `packageManager` entry to the generated package.json file."
},
"debug": {
"type": "boolean",
"description": "Enable Next.js debug build logging"
@@ -117,14 +117,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### files
Type: `string`
@@ -121,7 +121,7 @@ Generate a 'src/' directory for Next.js
Type: `string`
Choices: [github, gitlab, azure, bitbucket-pipelines, circleci, skip, yes]
Choices: [github, circleci, gitlab, azure, bitbucket-pipelines, skip, yes]
Which CI provider would you like to use?
@@ -149,12 +149,6 @@ Type: `string`
Use the provided versions for packages instead of the ones calculated by the migrator (e.g., --to="@nx/react@16.0.0,@nx/js@16.0.0")
### verbose
Type: `boolean`
Prints additional information about the commands (e.g., stack traces)
### version
Type: `boolean`
@@ -37,12 +37,6 @@ Type: `boolean`
Show help
### printConfig
Type: `string`
Print the resolved nx release configuration that would be used for the current command and then exit
### projects
Type: `string`
@@ -315,14 +309,6 @@ Type: `string`
Exclude certain projects from being processed
##### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
##### first-release
Type: `boolean`
@@ -119,14 +119,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### graph
Type: `string`
@@ -87,14 +87,6 @@ Type: `string`
Exclude certain projects from being processed
### excludeTaskDependencies
Type: `boolean`
Default: `false`
Skips running dependent tasks first
### graph
Type: `string`

Some files were not shown because too many files have changed in this diff Show More