3a33712668
## Current Behavior The remaining 11 first-party Nx plugins (`@nx/webpack`, `@nx/rollup`, `@nx/docker`, `@nx/gradle`, `@nx/rsbuild`, `@nx/web`, `@nx/node`, `@nx/nest`, `@nx/module-federation`, `@nx/rspack`, `@nx/storybook`) build into `../../dist/packages/<name>/` with `module: commonjs` and no `exports` map. Releases publish from a separate dist directory. That layout has the same drawbacks the prior migrations (devkit, workspace, nx, js, jest, eslint, eslint-plugin, vitest, cypress, playwright, vite) already addressed: - workspace consumers reach into `@nx/<name>/src/*` against the old layout, blocking nodenext / ESM-friendlier resolution - a single PR cannot publish a coordinated set because each package's dist must round-trip through `nx release` - `release.preserveLocalDependencyProtocols` cannot be turned on workspace-wide This PR is the final batch in the "Nx Local Dist Migration" project — it unblocks every still-unmigrated workspace package and finishes the rollout that started with `@nx/devkit` in #34946. ## Expected Behavior All 11 packages build to `packages/<name>/dist/` with: - `tsconfig.lib.json` set to `module: nodenext`, `moduleResolution: nodenext`, `composite: true`, `outDir: dist`, `declarationDir: dist`, `tsBuildInfoFile: dist/tsconfig.tsbuildinfo` - `package.json` `main`/`types` pointing into `dist/`, an `exports` map with `@nx/nx-source`/`types`/`default` conditions, `typesVersions` for legacy `moduleResolution: node` consumers, and a `files` allowlist - `project.json` `release.version.preserveLocalDependencyProtocols: true`, `manifestRootsToUpdate: ["packages/{projectName}"]`, and `nx-release-publish.packageRoot: packages/{projectName}` - `assets.json` `outDir` and eslint `dist` ignore updated - `src/utils/versions.ts` switched to `require(join('@nx/<name>', 'package.json')).version` so the self-reference survives the new layout - `README.md` renamed to `readme-template.md` with the build's `copy-readme.js` invocation passing explicit src/dest paths, and root `.gitignore` updated for the generated `README.md` - `scripts/nx-release.ts` `packagesToReset` extended so `nx release` properly snapshots/restores these source `package.json`s The 11 packages keep the `./src/*` wildcard in their exports map for now — the `@nx/devkit/internal`-style lockdown (Step 14b of the `dist-build-migration` skill) is intentionally deferred to per-package follow-up PRs to keep this one focused on the layout move. Two runtime fixes that mirror earlier work in this project: - `@nx/node` now declares `@nx/webpack` as a `workspace:*` devDep so its TS compile resolves `@nx/webpack/src/utils/ensure-dependencies` via the new exports map; the dynamic `import()` of that subpath was swapped to `require()` after `ensurePackage` so the temp install is visible (same pattern as the vite/vitest fix in #35743 — under `module: nodenext` a dynamic `import()` is preserved as a true ESM import and bypasses `Module._initPaths`). - `@nx/web` had two dynamic `await import('@nx/eslint/internal')` / `await import('@nx/vitest/generators')` call sites; both swapped to `require()` with `typeof import(...)` type annotations for the same reason. `e2e/nx-build/src/nx-build.test.ts` was extended to verify the new output paths for all 11 packages. ## Related Issue(s) Fixes NXC-3576 Fixes NXC-3577 Fixes NXC-3579 Fixes NXC-3586 Fixes NXC-3588 Fixes NXC-3591 Fixes NXC-3595 Fixes NXC-3598 Fixes NXC-3599 Fixes NXC-3602 Fixes NXC-4474 --------- Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>