17.2.0
🚀 Features
- angular: update component generator to use a single string
styles
orstyleUrl
property (#20146) - angular: support application builder for cypress component testing (#20214)
- angular: update ngrx to v17 (#20247)
- angular: support esbuild-based executors/builders in @nx/angular:dev-server (#20311)
- angular: convert module-federation-dev-server to executor (#20252)
- angular: support providing esbuild plugins to @nx/angular:browser-esbuild (#20504)
- angular: add application executor (#20529)
- core: extglob to standard glob parser (#20089)
- core: make createNodes async (#20195)
- core: track project changes in source map when applying plugins (#19955)
- core: independent nx releases and automated git operations (#20191)
- core: rust task hasher (#19617)
- core: programmatic API for nx release (#20371)
- core: allow setting true for changelog config to enable with defaults (#20376)
- core: add env parameter to run-commands (#20440)
- core: introduce workspace file archive (#20471)
- core: targets inferred from plugins override targetDefaults (#20586)
- core: add task plans to
--graph=file.json
argument (#20643) - graph: add project details view (#20466)
- linter: update eslint to next minor version (#20351)
- linter: support yaml for flat config conversion (#20022)
- linter: default lintFilePatterns to {projectRoot} (#20313)
- linter: add create-nodes plugin (#20264)
- misc: allow providing a path in the name option of project generators (#20274)
- module-federation: use single file-server for static remotes (#20006)
- module-federation: add comment to generated module federation config explaining usage of external remotes (#20177)
- module-federation: Add react support for dynamic federation (#20024)
- nextjs: Add support for create nodes for nextjs (#20193)
- nuxt: load nuxt config programmatically (#20185)
- nuxt: nodes for build, serve, test targets (#20145)
- nx-dev: call to action button (b9e02d152b)
- nx-dev: move Twitter pixel to site-level (059b061bfe)
- nx-dev: allow ranges in fences highlighting (#20202)
- nx-dev: rename nx-cloud tab to CI (#20476)
- nx-dev: improve advent of code page (#20517)
- nx-dev: allow custom media images (#20561)
- release: update dist-tags when publishing a package version that already exists (#20316)
- release: allow projects shorthand for single release group (#20560)
- testing: add cypress create nodes plugin (#19840)
- testing: distribute cypress tests for ci (#20188)
- testing: allow cypress preset to execute a command for a web server (#20355)
- vite: update to version 5 (#20341)
- vite: nodes for build, serve, test, preview targets (#20086)
- vite: Use app/lib tsconfig for buildable paths resolution (#19972)
- web: add verbose logging to waitForPortOpen function (#20260)
- web: support buildTarget that excludes project name (#20508)
- webpack: add plugin to automatically configure build and serve targets (#20243)
🩹 Fixes
- angular: update jest-preset-angular fixing an issue with component single string styles and styleUrl props (#20205)
- angular: fix misc issues with migration replacing the nguniversal usages (#20209)
- angular: set the correct target version for package update (#20219)
- angular: improve express server setup for static files in mf remote apps (#20218)
- angular: use esm2022 for secondary entrypoints in ng-packagr-lite executor (#20130)
- angular: display template error when cache is disabled in ng-packagr executors (#20277)
- angular: generate component with as-provided format when generating a library (#20306)
- angular: fix builder/executor resolution in ngcli-adapter (#20307)
- angular: force angular cli dev-server builder to handle nx browser-esbuild executor correctly (#20492)
- angular: ensure compat angular.json is read properly when creating a BuilderContext (#20499)
- angular: set tsconfig paths relative to the workspace root in target options (#20507)
- angular: update schema and validate compatibility in esbuild-based executors (#20564)
- core: drop file lock after its used (#20165)
- core: await for createNodesAsync (#20232)
- core: pass workingDirectory to executed schematic, if found in schema (#19371)
- core: change combine glob patterns to use the
+()
pattern (#20254) - core: fix performance regression from using projects for loading… (#20363)
- core: fix a flaky test (cee187b9e9)
- core: improve file gathering performance (#20377)
- core: handle local plugin executors when trying to hash targets (#20436)
- core: remove v8-compile-cache (#20454)
- core: programmatic release API should throw on error (#20448)
- core: fix handling of globs with {,.snap} (#20461)
- core: various release fixes (#20478)
- core: handle filesets with commas (#20483)
- core: update changelog schema (#20488)
- core: use relative
.nxignore
when walking workspace (#20500) - core: use
target_os = "linux"
instead of justlinux
for watch events (#20518) - core: sort project file map and global files (#20591)
- core: add 'dependsOn' property in when inferring build targets via plugins (#20614)
- core: run-commands should handle signals correctly (#20611)
- core: traverse project deps properly in hash planner (#20621)
- core: check compilerOptions exists before deleting it (#20648)
- core: listen to the write stream end unpacking lite client (#20642)
- core: add release.projects option to schema (#20645)
- core: fix calling exec at project root (#20647)
- core: hash files properly by reading the whole file (#20652)
- core: publish next versions of Nx with support for FreeBSD (#20659)
- core: have freebsd use the unix mtime function (#20662)
- devkit: make parseTargetString more tolerant to bad graph shapes (#20170)
- js: filtering of local dependencies when running
nx release version
(#19995) - js: update minimum supported typescript version by js plugin (#20530)
- linter: standalone e2e should not extend root config (#20379)
- linter: fix flat config file paths (#20386)
- linter: fix null coallescing in eslint-file (#20409)
- linter: fix missing dependencies fixer reducer (#20410)
- linter: remove dangling comma before ast json parse (#20412)
- linter: check if eslint plugin exists before adding target (#20510)
- linter: expose rule name when eslint requires parser options project (#20459)
- linter: do not allow relative import of non-project files (#20563)
- linter: support adding plugin at a later stage (#20557)
- misc: fix project-name-and-root-utils type imports in schemas (#20305)
- misc: @nx/web:file-server should not error on destructuring null (#20318)
- misc: add args to command in run-commands before unparsed args (#20506)
- module-federation: add tsconfig file for linting with TS webpack #20150 (#20210, #20150)
- module-federation: single file server should use project name for directory (#20278)
- module-federation: host with no remotes should not build remote apps (#20283)
- module-federation: fix static remote port determination (#20432)
- nextjs: read nextConfig path correctly when provided as an option. (#20241)
- nextjs: Component generator with path provided in the component name field (#20538)
- nextjs: When running dev server .next folder should be in source (#20536)
- nextjs: apply transpilation fixes and other webpack config when running dev-server (#20615)
- nextjs: fix crash when paths is undefined (#20598)
- nextjs: we should not cache .next/cache/ artifact (#20658)
- nuxt: import defineNuxtConfig function in nuxt.config.ts (#20183)
- nuxt: correct outputs for nuxt and vite (#20627)
- nx-dev: publish docs when on the latest tag (#20182)
- nx-dev: add wrapper for blog and semantic (#20594)
- nx-plugin: ensure plugin testing uses correct pm for install (#20061)
- react: types should be in compilerOptions of tsconfig.spec.json (#20290)
- react: remote url port depends on serve target (#20417)
- release: catch 403 when publishing an existing version (#20155)
- release: default to only publishing libs when no config is defined (#20315)
- release: only early exit when no changelog changes if expecting commit (#20568)
- release: do not update dependents when they already use "*" (#20607)
- release: allow interpolating {projectName} in custom commit message when valid (#20613)
- release: do not update dependents when they already use "*" " (#20607)
- repo: use a platform agnostic copy script (#20364)
- repo: fix release script to look for new node auth token (#20590)
- testing: target defaults migration should not throw if workspace contains inferred projects (#20189)
- testing: update the cypress plugin implementation (#20314)
- testing: set TS_NODE_PROJECT before running Jest so j.config.ts file transpile using the root tsconfig file (#20372)
- testing: cleanup cypress plugin and remove migration (#20453)
- testing: set TS_NODE_PROJECT before running Jest so j.config.ts file transpile using the root tsconfig file " (#20372, #20565)
- testing: recalculate cypress targets when cypress config changes (#20593)
- testing: fix lint config generation for cypress standalone (#20606)
- testing: add webServerCommands/ciWebServerCommands option for cy… (#20616)
- vite: remove process.send call (#20171)
- vite: vitest should use v8 as default (#20156)
- vite: vitest versions alignment (#20215)
- vite: adjust config generation (#20367)
- web: file-server falls back to outputs if outputPath is not preset (#20515)
- webpack: maintain entry arrays that are accessed from within composePlugins() (#20187)
- webpack: set isolatedConfig to true by default (#20281)
- webpack: change fileReplacements to absolute path (#20433)
- webpack: should not extract css when extractCss is false (#20415)
- webpack: infer serve-static target correctly from plugin (#20511)
- webpack: Fixed libraryTarget option not being set for node targets (#20505)
- webpack: ensure webpack config is always at the latest version when running in the daemon (#20618)
❤️ Thank You
- Austin Fahsl @fahslaj
- Benjamin Cabanes @bcabanes
- Colum Ferry @Coly010
- Craigory Coppola @AgentEnder
- Denis Frenademetz @skrtheboss
- Emily Xiong @xiongemi
- FrozenPandaz @FrozenPandaz
- Isaac Mann @isaacplmann
- Jack Hsu @jaysoo
- James Henry @JamesHenry
- Jason @CGQAQ
- Jason Jean @FrozenPandaz
- John Wiegert
- Jonathan Cammisuli
- Juri @juristr
- Juri Strumpflohner @juristr
- Katerina Skroumpelou @mandarini
- Kræn Hansen @kraenhansen
- Leosvel Pérez Espinosa @leosvelperez
- Martin Obert
- MaxKless @MaxKless
- Miroslav Jonaš @meeroslav
- Nicholas Cunningham @ndcunningham
- Pascal Küsgen
- Philipp Kirchniawy @pkirchniawy
- Tycho Bokdam @TriPSs
- Victor Savkin @vsavkin