Skip to content

Commit 1ffd673

Browse files
authored
feat(core): add target defaults in configuration generators rather th… (#21105)
1 parent 38307fa commit 1ffd673

File tree

20 files changed

+131
-49
lines changed

20 files changed

+131
-49
lines changed

packages/angular/src/generators/application/lib/create-project.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import type { Tree } from '@nx/devkit';
2-
import { addProjectConfiguration } from '@nx/devkit';
1+
import { addProjectConfiguration, Tree } from '@nx/devkit';
32
import type { AngularProjectConfiguration } from '../../../utils/types';
43
import { getInstalledAngularVersionInfo } from '../../utils/version-utils';
54
import type { NormalizedSchema } from './normalized-schema';
5+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
66

77
export function createProject(tree: Tree, options: NormalizedSchema) {
88
const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree);
@@ -20,6 +20,8 @@ export function createProject(tree: Tree, options: NormalizedSchema) {
2020
? 'browser'
2121
: 'main';
2222

23+
addBuildTargetDefaults(tree, buildExecutor);
24+
2325
let budgets = undefined;
2426
if (options.bundler === 'webpack' || angularMajorVersion >= 17) {
2527
if (options.strict) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { Tree } from 'nx/src/devkit-exports';
2+
import { requireNx } from '../../nx';
3+
4+
const { readNxJson, updateNxJson } = requireNx();
5+
6+
export function addBuildTargetDefaults(
7+
tree: Tree,
8+
executorName: string,
9+
buildTargetName = 'build'
10+
): void {
11+
const nxJson = readNxJson(tree);
12+
nxJson.targetDefaults ??= {};
13+
nxJson.targetDefaults[executorName] ??= {
14+
cache: true,
15+
dependsOn: [`^${buildTargetName}`],
16+
inputs:
17+
nxJson.namedInputs && 'production' in nxJson.namedInputs
18+
? ['production', '^production']
19+
: ['default', '^default'],
20+
};
21+
updateNxJson(tree, nxJson);
22+
}

packages/esbuild/src/generators/configuration/configuration.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import type { Tree } from '@nx/devkit';
21
import {
32
formatFiles,
43
joinPathFragments,
54
readProjectConfiguration,
5+
Tree,
66
updateProjectConfiguration,
77
writeJson,
88
} from '@nx/devkit';
@@ -12,6 +12,7 @@ import { getImportPath } from '@nx/js/src/utils/get-import-path';
1212
import { esbuildInitGenerator } from '../init/init';
1313
import { EsBuildExecutorOptions } from '../../executors/esbuild/schema';
1414
import { EsBuildProjectSchema } from './schema';
15+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
1516

1617
export async function configurationGenerator(
1718
tree: Tree,
@@ -39,6 +40,7 @@ function checkForTargetConflicts(tree: Tree, options: EsBuildProjectSchema) {
3940
}
4041

4142
function addBuildTarget(tree: Tree, options: EsBuildProjectSchema) {
43+
addBuildTargetDefaults(tree, '@nx/esbuild:esbuild', options.buildTarget);
4244
const project = readProjectConfiguration(tree, options.project);
4345
const packageJsonPath = joinPathFragments(project.root, 'package.json');
4446

packages/expo/src/generators/application/lib/add-project.ts

+5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ import {
99

1010
import { hasExpoPlugin } from '../../../utils/has-expo-plugin';
1111
import { NormalizedSchema } from './normalize-options';
12+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
1213

1314
export function addProject(host: Tree, options: NormalizedSchema) {
1415
const nxJson = readNxJson(host);
1516
const hasPlugin = hasExpoPlugin(host);
1617

18+
if (!hasPlugin) {
19+
addBuildTargetDefaults(host, '@nx/expo:build');
20+
}
21+
1722
const projectConfiguration: ProjectConfiguration = {
1823
root: options.appProjectRoot,
1924
sourceRoot: `${options.appProjectRoot}/src`,

packages/expo/src/generators/library/library.ts

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { NormalizedSchema, normalizeOptions } from './lib/normalize-options';
3232
import { Schema } from './schema';
3333
import { ensureDependencies } from '../../utils/ensure-dependencies';
3434
import { initRootBabelConfig } from '../../utils/init-root-babel-config';
35+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
3536

3637
export async function expoLibraryGenerator(
3738
host: Tree,
@@ -144,6 +145,8 @@ async function addProject(
144145

145146
const external = ['react/jsx-runtime', 'react-native', 'react', 'react-dom'];
146147

148+
addBuildTargetDefaults(host, '@nx/rollup:rollup');
149+
147150
project.targets.build = {
148151
executor: '@nx/rollup:rollup',
149152
outputs: ['{options.outputPath}'],

packages/js/src/generators/setup-build/generator.ts

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { addSwcConfig } from '../../utils/swc/add-swc-config';
1212
import { addSwcDependencies } from '../../utils/swc/add-swc-dependencies';
1313
import { nxVersion } from '../../utils/versions';
1414
import { SetupBuildGeneratorSchema } from './schema';
15+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
1516

1617
export async function setupBuildGenerator(
1718
tree: Tree,
@@ -122,6 +123,8 @@ export async function setupBuildGenerator(
122123
break;
123124
}
124125
case 'tsc': {
126+
addBuildTargetDefaults(tree, '@nx/js:tsc');
127+
125128
const outputPath = joinPathFragments('dist', project.root);
126129
project.targets[buildTarget] = {
127130
executor: `@nx/js:tsc`,
@@ -137,6 +140,8 @@ export async function setupBuildGenerator(
137140
break;
138141
}
139142
case 'swc': {
143+
addBuildTargetDefaults(tree, '@nx/js:swc');
144+
140145
const outputPath = joinPathFragments('dist', project.root);
141146
project.targets[buildTarget] = {
142147
executor: `@nx/js:swc`,

packages/next/src/generators/application/lib/add-project.ts

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
readNxJson,
66
Tree,
77
} from '@nx/devkit';
8+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
89

910
export function addProject(host: Tree, options: NormalizedSchema) {
1011
const targets: Record<string, any> = {};
@@ -20,6 +21,8 @@ export function addProject(host: Tree, options: NormalizedSchema) {
2021
);
2122

2223
if (!hasPlugin) {
24+
addBuildTargetDefaults(host, '@nx/next:build');
25+
2326
targets.build = {
2427
executor: '@nx/next:build',
2528
outputs: ['{options.outputPath}'],

packages/node/src/generators/application/application.ts

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import { initGenerator } from '../init/init';
4747
import { setupDockerGenerator } from '../setup-docker/setup-docker';
4848
import { Schema } from './schema';
4949
import { hasWebpackPlugin } from '../../utils/has-webpack-plugin';
50+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
5051

5152
export interface NormalizedSchema extends Schema {
5253
appProjectRoot: string;
@@ -160,9 +161,11 @@ function addProject(tree: Tree, options: NormalizedSchema) {
160161
};
161162

162163
if (options.bundler === 'esbuild') {
164+
addBuildTargetDefaults(tree, '@nx/esbuild:esbuild');
163165
project.targets.build = getEsBuildConfig(project, options);
164166
} else if (options.bundler === 'webpack') {
165167
if (!hasWebpackPlugin(tree)) {
168+
addBuildTargetDefaults(tree, `@nx/webpack:webpack`);
166169
project.targets.build = getWebpackBuildConfig(project, options);
167170
}
168171
}

packages/node/src/generators/library/library.ts

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { join } from 'path';
2121
import { tslibVersion, typesNodeVersion } from '../../utils/versions';
2222
import { initGenerator } from '../init/init';
2323
import { Schema } from './schema';
24+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
2425

2526
export interface NormalizedSchema extends Schema {
2627
fileName: string;
@@ -164,6 +165,7 @@ function updateProject(tree: Tree, options: NormalizedSchema) {
164165
const rootProject = options.projectRoot === '.' || options.projectRoot === '';
165166

166167
project.targets = project.targets || {};
168+
addBuildTargetDefaults(tree, `@nx/js:${options.compiler}`);
167169
project.targets.build = {
168170
executor: `@nx/js:${options.compiler}`,
169171
outputs: ['{options.outputPath}'],

packages/remix/src/generators/application/application.impl.ts

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { NxRemixGeneratorSchema } from './schema';
3636
import { updateDependencies } from '../utils/update-dependencies';
3737
import initGenerator from '../init/init';
3838
import { initGenerator as jsInitGenerator } from '@nx/js';
39+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
3940

4041
export default async function (tree: Tree, _options: NxRemixGeneratorSchema) {
4142
const options = await normalizeOptions(tree, _options);
@@ -44,6 +45,8 @@ export default async function (tree: Tree, _options: NxRemixGeneratorSchema) {
4445
await jsInitGenerator(tree, { skipFormat: true }),
4546
];
4647

48+
addBuildTargetDefaults(tree, '@nx/remix:build');
49+
4750
addProjectConfiguration(tree, options.projectName, {
4851
root: options.projectRoot,
4952
sourceRoot: `${options.projectRoot}`,

packages/rollup/src/generators/configuration/configuration.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import type { GeneratorCallback, Tree } from '@nx/devkit';
21
import {
32
formatFiles,
43
joinPathFragments,
54
readProjectConfiguration,
5+
Tree,
6+
GeneratorCallback,
67
runTasksInSerial,
78
updateProjectConfiguration,
89
writeJson,
@@ -12,6 +13,7 @@ import { getImportPath } from '@nx/js/src/utils/get-import-path';
1213
import { rollupInitGenerator } from '../init/init';
1314
import { RollupExecutorOptions } from '../../executors/rollup/schema';
1415
import { RollupProjectSchema } from './schema';
16+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
1517
import { ensureDependencies } from '../../utils/ensure-dependencies';
1618

1719
export async function configurationGenerator(
@@ -46,6 +48,7 @@ function checkForTargetConflicts(tree: Tree, options: RollupProjectSchema) {
4648
}
4749

4850
function addBuildTarget(tree: Tree, options: RollupProjectSchema) {
51+
addBuildTargetDefaults(tree, '@nx/rollup:rollup', options.buildTarget);
4952
const project = readProjectConfiguration(tree, options.project);
5053
const packageJsonPath = joinPathFragments(project.root, 'package.json');
5154

packages/storybook/src/generators/configuration/configuration.ts

+4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
addStaticTarget,
2121
addStorybookTarget,
2222
addStorybookToNamedInputs,
23+
addStorybookToTargetDefaults,
2324
configureTsProjectConfig,
2425
configureTsSolutionConfig,
2526
createProjectStorybookDir,
@@ -153,6 +154,9 @@ export async function configurationGenerator(
153154

154155
addBuildStorybookToCacheableOperations(tree);
155156
addStorybookToNamedInputs(tree);
157+
if (!hasPlugin) {
158+
addStorybookToTargetDefaults(tree);
159+
}
156160

157161
let devDeps = {};
158162

packages/storybook/src/generators/configuration/lib/util-functions.ts

+40-32
Original file line numberDiff line numberDiff line change
@@ -481,45 +481,53 @@ export function addStorybookToNamedInputs(tree: Tree) {
481481
}
482482
}
483483

484-
nxJson.targetDefaults ??= {};
485-
nxJson.targetDefaults['build-storybook'] ??= {};
486-
nxJson.targetDefaults['build-storybook'].inputs ??= [
487-
'default',
488-
hasProductionFileset ? '^production' : '^default',
489-
];
484+
updateNxJson(tree, nxJson);
485+
}
486+
}
490487

491-
if (
492-
!nxJson.targetDefaults['build-storybook'].inputs.includes(
493-
'{projectRoot}/.storybook/**/*'
494-
)
495-
) {
496-
nxJson.targetDefaults['build-storybook'].inputs.push(
497-
'{projectRoot}/.storybook/**/*'
498-
);
499-
}
488+
export function addStorybookToTargetDefaults(tree: Tree) {
489+
const nxJson = readNxJson(tree);
490+
491+
nxJson.targetDefaults ??= {};
492+
nxJson.targetDefaults['build-storybook'] ??= {};
493+
nxJson.targetDefaults['build-storybook'].inputs ??= [
494+
'default',
495+
nxJson.namedInputs && 'production' in nxJson.namedInputs
496+
? '^production'
497+
: '^default',
498+
];
500499

501-
// Delete the !{projectRoot}/.storybook/**/* glob from build-storybook
502-
// because we want to rebuild Storybook if the .storybook folder changes
503-
const index = nxJson.targetDefaults['build-storybook'].inputs.indexOf(
504-
'!{projectRoot}/.storybook/**/*'
500+
if (
501+
!nxJson.targetDefaults['build-storybook'].inputs.includes(
502+
'{projectRoot}/.storybook/**/*'
503+
)
504+
) {
505+
nxJson.targetDefaults['build-storybook'].inputs.push(
506+
'{projectRoot}/.storybook/**/*'
505507
);
508+
}
506509

507-
if (index !== -1) {
508-
nxJson.targetDefaults['build-storybook'].inputs.splice(index, 1);
509-
}
510+
// Delete the !{projectRoot}/.storybook/**/* glob from build-storybook
511+
// because we want to rebuild Storybook if the .storybook folder changes
512+
const index = nxJson.targetDefaults['build-storybook'].inputs.indexOf(
513+
'!{projectRoot}/.storybook/**/*'
514+
);
510515

511-
if (
512-
!nxJson.targetDefaults['build-storybook'].inputs.includes(
513-
'{projectRoot}/tsconfig.storybook.json'
514-
)
515-
) {
516-
nxJson.targetDefaults['build-storybook'].inputs.push(
517-
'{projectRoot}/tsconfig.storybook.json'
518-
);
519-
}
516+
if (index !== -1) {
517+
nxJson.targetDefaults['build-storybook'].inputs.splice(index, 1);
518+
}
520519

521-
updateNxJson(tree, nxJson);
520+
if (
521+
!nxJson.targetDefaults['build-storybook'].inputs.includes(
522+
'{projectRoot}/tsconfig.storybook.json'
523+
)
524+
) {
525+
nxJson.targetDefaults['build-storybook'].inputs.push(
526+
'{projectRoot}/tsconfig.storybook.json'
527+
);
522528
}
529+
530+
updateNxJson(tree, nxJson);
523531
}
524532

525533
export function createProjectStorybookDir(

packages/storybook/src/generators/init/init.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,10 @@ function moveToDevDependencies(tree: Tree): GeneratorCallback {
8888
}
8989

9090
export async function initGenerator(tree: Tree, schema: Schema) {
91-
addCacheableOperation(tree);
92-
9391
if (process.env.NX_PCV3 === 'true') {
9492
addPlugin(tree);
93+
} else {
94+
addCacheableOperation(tree);
9595
}
9696

9797
const tasks: GeneratorCallback[] = [];

packages/storybook/src/migrations/update-16-5-0/move-storybook-tsconfig.ts

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { getProjects, joinPathFragments, Tree, formatFiles } from '@nx/devkit';
22
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
33
import {
44
addStorybookToNamedInputs,
5+
addStorybookToTargetDefaults,
56
renameAndMoveOldTsConfig,
67
} from '../../generators/configuration/lib/util-functions';
78

@@ -26,5 +27,6 @@ export default async function (tree: Tree) {
2627
);
2728

2829
addStorybookToNamedInputs(tree);
30+
addStorybookToTargetDefaults(tree);
2931
await formatFiles(tree);
3032
}

packages/vite/src/utils/generator-utils.ts

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { VitePreviewServerExecutorOptions } from '../executors/preview-server/sc
1515
import { VitestExecutorOptions } from '../executors/test/schema';
1616
import { ViteConfigurationGeneratorSchema } from '../generators/configuration/schema';
1717
import { ensureViteConfigIsCorrect } from './vite-config-edit-utils';
18+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
1819

1920
export type Target = 'build' | 'serve' | 'test' | 'preview';
2021
export type TargetFlags = Partial<Record<Target, boolean>>;
@@ -200,6 +201,7 @@ export function addOrChangeBuildTarget(
200201
options: ViteConfigurationGeneratorSchema,
201202
target: string
202203
) {
204+
addBuildTargetDefaults(tree, '@nx/vite:build');
203205
const project = readProjectConfiguration(tree, options.project);
204206

205207
const buildOptions: ViteBuildExecutorOptions = {

packages/web/src/generators/application/application.ts

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { webInitGenerator } from '../init/init';
3636
import { Schema } from './schema';
3737
import { getNpmScope } from '@nx/js/src/utils/package-json/get-npm-scope';
3838
import { hasWebpackPlugin } from '../../utils/has-webpack-plugin';
39+
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/add-build-target-defaults';
3940

4041
interface NormalizedSchema extends Schema {
4142
projectName: string;
@@ -175,6 +176,7 @@ async function setupBundler(tree: Tree, options: NormalizedSchema) {
175176
// TODO(jack): Flush this out... no bundler should be possible for web but the experience isn't holistic due to missing features (e.g. writing index.html).
176177
} else if (options.bundler === 'none') {
177178
const project = readProjectConfiguration(tree, options.projectName);
179+
addBuildTargetDefaults(tree, `@nx/js:${options.compiler}`);
178180
project.targets.build = {
179181
executor: `@nx/js:${options.compiler}`,
180182
outputs: ['{options.outputPath}'],

0 commit comments

Comments
 (0)