Loading workspace insights... Statistics interval
7 days30 daysLatest CI Pipeline Executions
2a412a3a chore(repo): declare lazy-loaded packages as implicit deps (#35392)
## Current Behavior
Many Nx plugin packages lazy-load other plugins at runtime via
`ensurePackage()` or the `require('@nx' + '/...')` pattern. These
dependencies weren't declared in `package.json` at all, which meant:
- `pnpm install` in the monorepo happened to find them only via hoisting
from unrelated `devDependencies`.
- Published packages gave no install-time signal about what optional
peers a consumer might want.
- The dependencies were invisible to dependency-graph tooling,
supply-chain audits, and any future semantic-versioning logic.
## Expected Behavior
Every lazy-loaded plugin or tool is declared as `peerDependencies` +
`peerDependenciesMeta: { X: { optional: true } }`, matching the existing
convention in `@nx/angular`, `@nx/angular-rspack`, `@nx/eslint`, etc.
This gives consumers correct install/publish semantics without requiring
them to install peers they don't use.
For two packages — `@nx/workspace` and `@nx/js` — several of their
newly-declared peers transitively reverse-depend on them. Raw
package.json edges would cause `@nx/js:typescript-sync` to produce
circular TypeScript project references (TS6202). Those two packages use
`implicitDependencies: ["!name", …]` in `project.json` to drop the
cyclic graph edges, keeping the task graph and tsc builds cycle-free
without modifying the sync generator itself.
Commits:
1. **workspace + js**: 14 optional peers on `@nx/workspace`, 5 on
`@nx/js`, plus `implicitDependencies` negations in each `project.json`.
2. **Plugin packages**: `@nx/angular`, `@nx/expo`, `@nx/next`,
`@nx/nuxt`, `@nx/react-native`, `@nx/storybook`, `@nx/vite`, `@nx/vue`,
`@nx/web`. Cycles don't form for any of these, so no
`implicitDependencies` negations were needed. `@nx/js:typescript-sync`
populated the corresponding `tsconfig.lib.json` project references,
which are committed alongside the `package.json` changes.
## Related Issue(s)
Fixes #
## Test plan
see:
https://staging.nx.app/runs/m3Otv2Xl7m?sandboxViolations=true&query=%3Atest
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com> 44af455f chore(repo): prune redundant implicitDependencies, bump bust
Drop implicit edges that don't change resolved test inputs (verified via
`nx show target inputs <p>:test` — byte-identical before/after across
the 8 touched projects). The same source files for cypress, docker,
eslint, node, module-federation, playwright still arrive via paths
through `workspace`'s implicit list and `node`'s kept edges, so sandbox
coverage is unchanged.
Drops:
- angular-rspack: nx (covered via devkit -> nx)
- create-nx-plugin: nx, angular (no source / spec evidence)
- create-nx-workspace: nx (covered transitively)
- express: nx (covered via devkit -> nx)
- module-federation: cypress, eslint
- node: cypress, module-federation, playwright
- rspack: cypress, docker, eslint, node
Restored:
- plugin: vitest (contract coupling — generator emits @nx/vitest:test
executor and the spec asserts against that string)
Bump bust to invalidate caches for fresh sandbox-report run. 1a8c31e9 chore(repo): prune redundant implicitDependencies, bump bust
Drop implicit edges that don't change resolved test inputs (verified via
`nx show target inputs <p>:test` — byte-identical before/after across
the 8 touched projects). The same source files for cypress, docker,
eslint, node, module-federation, playwright still arrive via paths
through `workspace`'s implicit list and `node`'s kept edges, so sandbox
coverage is unchanged.
Drops:
- angular-rspack: nx (covered via devkit -> nx)
- create-nx-plugin: nx, angular (no source / spec evidence)
- create-nx-workspace: nx (covered transitively)
- express: nx (covered via devkit -> nx)
- module-federation: cypress, eslint
- node: cypress, module-federation, playwright
- rspack: cypress, docker, eslint, node
Restored:
- plugin: vitest (contract coupling — generator emits @nx/vitest:test
executor and the spec asserts against that string)
Bump bust to invalidate caches for fresh sandbox-report run. ccab18d8 fix(dotnet): widen dependent task output hashing and add editorconfig input
- Broaden `dependentTasksOutputFiles` glob from `**/*.{dll,props,targets}` to
`**/*` on build, test, pack, and publish so dep projects' `bin/`/`obj/`
artifacts (`.deps.json`, `.runtimeconfig.json`, `.pdb`, `.dll.config`,
`apphost`, `assets.cache`) participate in input hashing.
- Add `{workspaceRoot}/.editorconfig` as an input on the same targets;
dotnet build reads it for code-style enforcement.