feat(misc): enable new ts minimal setup by default and guard execution of generators with no support for it (#28199)

- Enable generating the new & minimal TS setup by default when
generating the `ts` preset with CNW.
The existing `NX_ADD_TS_PLUGIN` environment variable is kept with its
default value inverted and set to `true`. It can be used to opt out of
the new TS setup by running CNW with `NX_ADD_TS_PLUGIN=false`.
- Throw an error when running generators that don't yet support the new
TS setup.
- We'll add support for those generators incrementally in follow-up PRs.

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
<!-- Fixes NXC-1066 -->
<!-- Fixes NXC-1068 -->

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
This commit is contained in:
Leosvel Pérez Espinosa 2024-10-02 14:29:06 +02:00 committed by GitHub
parent 942f6fc2ea
commit ec801b4c16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
66 changed files with 275 additions and 21 deletions

View File

@ -7,7 +7,9 @@ import {
Tree, Tree,
updateNxJson, updateNxJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { angularInitGenerator } from '../init/init'; import { angularInitGenerator } from '../init/init';
import { setupSsr } from '../setup-ssr/setup-ssr'; import { setupSsr } from '../setup-ssr/setup-ssr';
import { setupTailwindGenerator } from '../setup-tailwind/setup-tailwind'; import { setupTailwindGenerator } from '../setup-tailwind/setup-tailwind';
@ -27,12 +29,13 @@ import {
updateEditorTsConfig, updateEditorTsConfig,
} from './lib'; } from './lib';
import type { Schema } from './schema'; import type { Schema } from './schema';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
export async function applicationGenerator( export async function applicationGenerator(
tree: Tree, tree: Tree,
schema: Partial<Schema> schema: Partial<Schema>
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'angular', 'application');
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);
const rootOffset = offsetFromRoot(options.appProjectRoot); const rootOffset = offsetFromRoot(options.appProjectRoot);

View File

@ -9,16 +9,19 @@ import {
determineProjectNameAndRootOptions, determineProjectNameAndRootOptions,
ensureProjectName, ensureProjectName,
} from '@nx/devkit/src/generators/project-name-and-root-utils'; } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { isValidVariable } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { E2eTestRunner } from '../../utils/test-runners'; import { E2eTestRunner } from '../../utils/test-runners';
import applicationGenerator from '../application/application'; import applicationGenerator from '../application/application';
import remoteGenerator from '../remote/remote'; import remoteGenerator from '../remote/remote';
import { setupMf } from '../setup-mf/setup-mf'; import { setupMf } from '../setup-mf/setup-mf';
import { addMfEnvToTargetDefaultInputs } from '../utils/add-mf-env-to-inputs';
import { updateSsrSetup } from './lib'; import { updateSsrSetup } from './lib';
import type { Schema } from './schema'; import type { Schema } from './schema';
import { addMfEnvToTargetDefaultInputs } from '../utils/add-mf-env-to-inputs';
import { isValidVariable } from '@nx/js';
export async function host(tree: Tree, schema: Schema) { export async function host(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'angular', 'host');
const { typescriptConfiguration = true, ...options }: Schema = schema; const { typescriptConfiguration = true, ...options }: Schema = schema;
options.standalone = options.standalone ?? true; options.standalone = options.standalone ?? true;

View File

@ -9,14 +9,17 @@ import {
type Tree, type Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPlugin } from '@nx/devkit/src/utils/add-plugin'; import { addPlugin } from '@nx/devkit/src/utils/add-plugin';
import { getInstalledPackageVersion, versions } from '../utils/version-utils'; import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodesV2 } from '../../plugins/plugin'; import { createNodesV2 } from '../../plugins/plugin';
import { getInstalledPackageVersion, versions } from '../utils/version-utils';
import { Schema } from './schema'; import { Schema } from './schema';
export async function angularInitGenerator( export async function angularInitGenerator(
tree: Tree, tree: Tree,
options: Schema options: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'angular', 'init');
ignoreAngularCacheDirectory(tree); ignoreAngularCacheDirectory(tree);
const installTask = installAngularDevkitCoreIfMissing(tree, options); const installTask = installAngularDevkitCoreIfMissing(tree, options);

View File

@ -30,11 +30,14 @@ import { addJest } from '../utils/add-jest';
import { setGeneratorDefaults } from './lib/set-generator-defaults'; import { setGeneratorDefaults } from './lib/set-generator-defaults';
import { ensureAngularDependencies } from '../utils/ensure-angular-dependencies'; import { ensureAngularDependencies } from '../utils/ensure-angular-dependencies';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
export async function libraryGenerator( export async function libraryGenerator(
tree: Tree, tree: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'angular', 'library');
// Do some validation checks // Do some validation checks
if (!schema.routing && schema.lazy) { if (!schema.routing && schema.lazy) {
throw new Error(`To use "--lazy" option, "--routing" must also be set.`); throw new Error(`To use "--lazy" option, "--routing" must also be set.`);

View File

@ -9,15 +9,18 @@ import {
determineProjectNameAndRootOptions, determineProjectNameAndRootOptions,
ensureProjectName, ensureProjectName,
} from '@nx/devkit/src/generators/project-name-and-root-utils'; } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { swcHelpersVersion } from '@nx/js/src/utils/versions';
import { E2eTestRunner } from '../../utils/test-runners'; import { E2eTestRunner } from '../../utils/test-runners';
import { applicationGenerator } from '../application/application'; import { applicationGenerator } from '../application/application';
import { setupMf } from '../setup-mf/setup-mf'; import { setupMf } from '../setup-mf/setup-mf';
import { addMfEnvToTargetDefaultInputs } from '../utils/add-mf-env-to-inputs';
import { findNextAvailablePort, updateSsrSetup } from './lib'; import { findNextAvailablePort, updateSsrSetup } from './lib';
import type { Schema } from './schema'; import type { Schema } from './schema';
import { swcHelpersVersion } from '@nx/js/src/utils/versions';
import { addMfEnvToTargetDefaultInputs } from '../utils/add-mf-env-to-inputs';
export async function remote(tree: Tree, schema: Schema) { export async function remote(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'angular', 'remote');
const { typescriptConfiguration = true, ...options }: Schema = schema; const { typescriptConfiguration = true, ...options }: Schema = schema;
options.standalone = options.standalone ?? true; options.standalone = options.standalone ?? true;

View File

@ -397,7 +397,7 @@ async function determineStack(
name: `none`, name: `none`,
message: message:
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true' process.env.NX_ADD_TS_PLUGIN !== 'false'
? `None: Configures a TypeScript/JavaScript monorepo.` ? `None: Configures a TypeScript/JavaScript monorepo.`
: `None: Configures a TypeScript/JavaScript project with minimal structure.`, : `None: Configures a TypeScript/JavaScript project with minimal structure.`,
}, },
@ -447,8 +447,9 @@ async function determineNoneOptions(
parsedArgs: yargs.Arguments<NoneArguments> parsedArgs: yargs.Arguments<NoneArguments>
): Promise<Partial<NoneArguments>> { ): Promise<Partial<NoneArguments>> {
if ( if (
(!parsedArgs.preset || parsedArgs.preset === Preset.TS) &&
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true' process.env.NX_ADD_TS_PLUGIN !== 'false'
) { ) {
const reply = await enquirer.prompt<{ prettier: 'Yes' | 'No' }>([ const reply = await enquirer.prompt<{ prettier: 'Yes' | 'No' }>([
{ {

View File

@ -14,6 +14,7 @@ import {
runTasksInSerial, runTasksInSerial,
GeneratorCallback, GeneratorCallback,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { installedCypressVersion } from '../../utils/cypress-version'; import { installedCypressVersion } from '../../utils/cypress-version';
import { import {
@ -42,6 +43,8 @@ export async function componentConfigurationGeneratorInternal(
tree: Tree, tree: Tree,
options: CypressComponentConfigurationSchema options: CypressComponentConfigurationSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'cypress', 'component-configuration');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const opts = normalizeOptions(tree, options); const opts = normalizeOptions(tree, options);

View File

@ -17,18 +17,19 @@ import {
updateJson, updateJson,
updateProjectConfiguration, updateProjectConfiguration,
} from '@nx/devkit'; } from '@nx/devkit';
import { Linter, LinterType } from '@nx/eslint';
import { import {
getRelativePathToRootTsConfig, getRelativePathToRootTsConfig,
initGenerator as jsInitGenerator, initGenerator as jsInitGenerator,
} from '@nx/js'; } from '@nx/js';
import { Linter, LinterType } from '@nx/eslint'; import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { join } from 'path'; import { join } from 'path';
import { addLinterToCyProject } from '../../utils/add-linter'; import { addLinterToCyProject } from '../../utils/add-linter';
import { addDefaultE2EConfig } from '../../utils/config'; import { addDefaultE2EConfig } from '../../utils/config';
import { installedCypressVersion } from '../../utils/cypress-version'; import { installedCypressVersion } from '../../utils/cypress-version';
import { typesNodeVersion, viteVersion } from '../../utils/versions'; import { typesNodeVersion, viteVersion } from '../../utils/versions';
import cypressInitGenerator, { addPlugin } from '../init/init';
import { addBaseCypressSetup } from '../base-setup/base-setup'; import { addBaseCypressSetup } from '../base-setup/base-setup';
import cypressInitGenerator, { addPlugin } from '../init/init';
export interface CypressE2EConfigSchema { export interface CypressE2EConfigSchema {
project: string; project: string;
@ -67,6 +68,8 @@ export async function configurationGeneratorInternal(
tree: Tree, tree: Tree,
options: CypressE2EConfigSchema options: CypressE2EConfigSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'cypress', 'configuration');
const opts = normalizeOptions(tree, options); const opts = normalizeOptions(tree, options);
opts.addPlugin ??= process.env.NX_ADD_PLUGINS !== 'false'; opts.addPlugin ??= process.env.NX_ADD_PLUGINS !== 'false';
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -11,6 +11,7 @@ import {
updateNxJson, updateNxJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPlugin as _addPlugin } from '@nx/devkit/src/utils/add-plugin'; import { addPlugin as _addPlugin } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodesV2 } from '../../plugins/plugin'; import { createNodesV2 } from '../../plugins/plugin';
import { cypressVersion, nxVersion } from '../../utils/versions'; import { cypressVersion, nxVersion } from '../../utils/versions';
import { Schema } from './schema'; import { Schema } from './schema';
@ -105,6 +106,8 @@ export async function cypressInitGeneratorInternal(
tree: Tree, tree: Tree,
options: Schema options: Schema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'cypress', 'init');
updateProductionFileset(tree); updateProductionFileset(tree);
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);

View File

@ -1,4 +1,5 @@
import { formatFiles, runTasksInSerial, Tree } from '@nx/devkit'; import { formatFiles, runTasksInSerial, Tree } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import detoxInitGenerator from '../init/init'; import detoxInitGenerator from '../init/init';
import { addGitIgnoreEntry } from './lib/add-git-ignore-entry'; import { addGitIgnoreEntry } from './lib/add-git-ignore-entry';
@ -20,6 +21,8 @@ export async function detoxApplicationGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
) { ) {
assertNotUsingTsSolutionSetup(host, 'detox', 'application');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
const initTask = await detoxInitGenerator(host, { const initTask = await detoxInitGenerator(host, {

View File

@ -9,6 +9,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodes } from '../../plugins/plugin'; import { createNodes } from '../../plugins/plugin';
import { detoxVersion, nxVersion } from '../../utils/versions'; import { detoxVersion, nxVersion } from '../../utils/versions';
import { Schema } from './schema'; import { Schema } from './schema';
@ -18,6 +19,8 @@ export function detoxInitGenerator(host: Tree, schema: Schema) {
} }
export async function detoxInitGeneratorInternal(host: Tree, schema: Schema) { export async function detoxInitGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'detox', 'init');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const nxJson = readNxJson(host); const nxJson = readNxJson(host);

View File

@ -8,6 +8,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { getImportPath } from '@nx/js/src/utils/get-import-path'; import { getImportPath } from '@nx/js/src/utils/get-import-path';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { esbuildInitGenerator } from '../init/init'; import { esbuildInitGenerator } from '../init/init';
import { EsBuildExecutorOptions } from '../../executors/esbuild/schema'; import { EsBuildExecutorOptions } from '../../executors/esbuild/schema';
@ -18,6 +19,8 @@ export async function configurationGenerator(
tree: Tree, tree: Tree,
options: EsBuildProjectSchema options: EsBuildProjectSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'esbuild', 'configuration');
const task = await esbuildInitGenerator(tree, { const task = await esbuildInitGenerator(tree, {
...options, ...options,
skipFormat: true, skipFormat: true,

View File

@ -4,11 +4,14 @@ import {
GeneratorCallback, GeneratorCallback,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { Schema } from './schema'; import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { esbuildVersion } from '@nx/js/src/utils/versions'; import { esbuildVersion } from '@nx/js/src/utils/versions';
import { nxVersion } from '../../utils/versions'; import { nxVersion } from '../../utils/versions';
import { Schema } from './schema';
export async function esbuildInitGenerator(tree: Tree, schema: Schema) { export async function esbuildInitGenerator(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'esbuild', 'init');
let installTask: GeneratorCallback = () => {}; let installTask: GeneratorCallback = () => {};
if (!schema.skipPackageJson) { if (!schema.skipPackageJson) {
installTask = addDependenciesToPackageJson( installTask = addDependenciesToPackageJson(

View File

@ -6,6 +6,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { addLinting } from '../../utils/add-linting'; import { addLinting } from '../../utils/add-linting';
import { addJest } from '../../utils/add-jest'; import { addJest } from '../../utils/add-jest';
@ -35,6 +36,8 @@ export async function expoApplicationGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'expo', 'application');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -9,6 +9,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodes } from '../../../plugins/plugin'; import { createNodes } from '../../../plugins/plugin';
import { import {
expoCliVersion, expoCliVersion,
@ -27,6 +28,8 @@ export function expoInitGenerator(tree: Tree, schema: Schema) {
} }
export async function expoInitGeneratorInternal(host: Tree, schema: Schema) { export async function expoInitGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'expo', 'init');
const nxJson = readNxJson(host); const nxJson = readNxJson(host);
const addPluginDefault = const addPluginDefault =
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&

View File

@ -20,6 +20,7 @@ import {
getRelativePathToRootTsConfig, getRelativePathToRootTsConfig,
initGenerator as jsInitGenerator, initGenerator as jsInitGenerator,
} from '@nx/js'; } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import init from '../init/init'; import init from '../init/init';
import { addLinting } from '../../utils/add-linting'; import { addLinting } from '../../utils/add-linting';
import { addJest } from '../../utils/add-jest'; import { addJest } from '../../utils/add-jest';
@ -49,6 +50,8 @@ export async function expoLibraryGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'expo', 'library');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
if (options.publishable === true && !schema.importPath) { if (options.publishable === true && !schema.importPath) {
throw new Error( throw new Error(

View File

@ -32,6 +32,7 @@
}, },
"dependencies": { "dependencies": {
"@nx/devkit": "file:../devkit", "@nx/devkit": "file:../devkit",
"@nx/js": "file:../js",
"@nx/node": "file:../node", "@nx/node": "file:../node",
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },

View File

@ -11,6 +11,7 @@ import {
determineProjectNameAndRootOptions, determineProjectNameAndRootOptions,
ensureProjectName, ensureProjectName,
} from '@nx/devkit/src/generators/project-name-and-root-utils'; } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { applicationGenerator as nodeApplicationGenerator } from '@nx/node'; import { applicationGenerator as nodeApplicationGenerator } from '@nx/node';
import { tslibVersion } from '@nx/node/src/utils/versions'; import { tslibVersion } from '@nx/node/src/utils/versions';
import { join } from 'path'; import { join } from 'path';
@ -74,6 +75,8 @@ export async function applicationGenerator(tree: Tree, schema: Schema) {
} }
export async function applicationGeneratorInternal(tree: Tree, schema: Schema) { export async function applicationGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'express', 'application');
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -6,6 +6,7 @@ import {
runTasksInSerial, runTasksInSerial,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { expressVersion, nxVersion } from '../../utils/versions'; import { expressVersion, nxVersion } from '../../utils/versions';
import type { Schema } from './schema'; import type { Schema } from './schema';
@ -28,6 +29,8 @@ function updateDependencies(tree: Tree, schema: Schema) {
} }
export async function initGenerator(tree: Tree, schema: Schema) { export async function initGenerator(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'express', 'init');
let installTask: GeneratorCallback = () => {}; let installTask: GeneratorCallback = () => {};
if (!schema.skipPackageJson) { if (!schema.skipPackageJson) {
installTask = updateDependencies(tree, schema); installTask = updateDependencies(tree, schema);

View File

@ -90,7 +90,7 @@ export async function initGeneratorInternal(
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
nxJson.useInferencePlugins !== false; nxJson.useInferencePlugins !== false;
schema.addTsPlugin ??= schema.addTsPlugin ??=
schema.addPlugin && process.env.NX_ADD_TS_PLUGIN === 'true'; schema.addPlugin && process.env.NX_ADD_TS_PLUGIN !== 'false';
if (schema.addTsPlugin) { if (schema.addTsPlugin) {
await addPlugin( await addPlugin(

View File

@ -1,4 +1,4 @@
import { readJson, readNxJson, type Tree } from '@nx/devkit'; import { output, readJson, readNxJson, type Tree } from '@nx/devkit';
import { isUsingPackageManagerWorkspaces } from '../package-manager-workspaces'; import { isUsingPackageManagerWorkspaces } from '../package-manager-workspaces';
export function isUsingTypeScriptPlugin(tree: Tree): boolean { export function isUsingTypeScriptPlugin(tree: Tree): boolean {
@ -61,3 +61,29 @@ function isWorkspaceSetupWithTsSolution(tree: Tree): boolean {
return true; return true;
} }
export function assertNotUsingTsSolutionSetup(
tree: Tree,
pluginName: string,
generatorName: string
): void {
if (
process.env.NX_IGNORE_UNSUPPORTED_TS_SETUP === 'true' ||
!isUsingTsSolutionSetup(tree)
) {
return;
}
const artifactString =
generatorName === 'init'
? `"@nx/${pluginName}" plugin`
: `"@nx/${pluginName}:${generatorName}" generator`;
output.error({
title: `The ${artifactString} doesn't yet support the existing TypeScript setup`,
bodyLines: [
`We're working hard to support the existing TypeScript setup with the ${artifactString}. We'll soon release a new version of Nx with support for it.`,
],
});
process.exit(1);
}

View File

@ -1,5 +1,6 @@
import type { GeneratorCallback, Tree } from '@nx/devkit'; import type { GeneratorCallback, Tree } from '@nx/devkit';
import { formatFiles, runTasksInSerial } from '@nx/devkit'; import { formatFiles, runTasksInSerial } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { applicationGenerator as nodeApplicationGenerator } from '@nx/node'; import { applicationGenerator as nodeApplicationGenerator } from '@nx/node';
import { initGenerator } from '../init/init'; import { initGenerator } from '../init/init';
@ -26,6 +27,8 @@ export async function applicationGeneratorInternal(
tree: Tree, tree: Tree,
rawOptions: ApplicationGeneratorOptions rawOptions: ApplicationGeneratorOptions
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'nest', 'application');
const options = await normalizeOptions(tree, rawOptions); const options = await normalizeOptions(tree, rawOptions);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -1,5 +1,6 @@
import type { GeneratorCallback, Tree } from '@nx/devkit'; import type { GeneratorCallback, Tree } from '@nx/devkit';
import { formatFiles } from '@nx/devkit'; import { formatFiles } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { addDependencies } from './lib'; import { addDependencies } from './lib';
import type { InitGeneratorOptions } from './schema'; import type { InitGeneratorOptions } from './schema';
@ -8,6 +9,8 @@ export async function initGenerator(
tree: Tree, tree: Tree,
options: InitGeneratorOptions options: InitGeneratorOptions
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'nest', 'init');
let installPackagesTask: GeneratorCallback = () => {}; let installPackagesTask: GeneratorCallback = () => {};
if (!options.skipPackageJson) { if (!options.skipPackageJson) {
installPackagesTask = addDependencies(tree, options); installPackagesTask = addDependencies(tree, options);

View File

@ -1,6 +1,7 @@
import type { GeneratorCallback, Tree } from '@nx/devkit'; import type { GeneratorCallback, Tree } from '@nx/devkit';
import { formatFiles, runTasksInSerial } from '@nx/devkit'; import { formatFiles, runTasksInSerial } from '@nx/devkit';
import { libraryGenerator as jsLibraryGenerator } from '@nx/js'; import { libraryGenerator as jsLibraryGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { import {
addExportsToBarrelFile, addExportsToBarrelFile,
addProject, addProject,
@ -29,6 +30,8 @@ export async function libraryGeneratorInternal(
tree: Tree, tree: Tree,
rawOptions: LibraryGeneratorOptions rawOptions: LibraryGeneratorOptions
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'nest', 'library');
const options = await normalizeOptions(tree, rawOptions); const options = await normalizeOptions(tree, rawOptions);
await jsLibraryGenerator(tree, toJsLibraryGeneratorOptions(options)); await jsLibraryGenerator(tree, toJsLibraryGeneratorOptions(options));
const initTask = await initGenerator(tree, rawOptions); const initTask = await initGenerator(tree, rawOptions);

View File

@ -7,6 +7,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { setupTailwindGenerator } from '@nx/react'; import { setupTailwindGenerator } from '@nx/react';
import { import {
testingLibraryReactVersion, testingLibraryReactVersion,
@ -39,6 +40,8 @@ export async function applicationGenerator(host: Tree, schema: Schema) {
} }
export async function applicationGeneratorInternal(host: Tree, schema: Schema) { export async function applicationGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'next', 'application');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);

View File

@ -8,6 +8,7 @@ import {
createProjectGraphAsync, createProjectGraphAsync,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { reactDomVersion, reactVersion } from '@nx/react/src/utils/versions'; import { reactDomVersion, reactVersion } from '@nx/react/src/utils/versions';
import { addGitIgnoreEntry } from '../../utils/add-gitignore-entry'; import { addGitIgnoreEntry } from '../../utils/add-gitignore-entry';
import { nextVersion, nxVersion } from '../../utils/versions'; import { nextVersion, nxVersion } from '../../utils/versions';
@ -45,6 +46,8 @@ export async function nextInitGeneratorInternal(
host: Tree, host: Tree,
schema: InitSchema schema: InitSchema
) { ) {
assertNotUsingTsSolutionSetup(host, 'next', 'init');
const nxJson = readNxJson(host); const nxJson = readNxJson(host);
const addPluginDefault = const addPluginDefault =
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&

View File

@ -9,6 +9,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { libraryGenerator as reactLibraryGenerator } from '@nx/react/src/generators/library/library'; import { libraryGenerator as reactLibraryGenerator } from '@nx/react/src/generators/library/library';
import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js'; import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { testingLibraryReactVersion } from '@nx/react/src/utils/versions'; import { testingLibraryReactVersion } from '@nx/react/src/utils/versions';
import { nextInitGenerator } from '../init/init'; import { nextInitGenerator } from '../init/init';
@ -24,6 +25,8 @@ export async function libraryGenerator(host: Tree, rawOptions: Schema) {
} }
export async function libraryGeneratorInternal(host: Tree, rawOptions: Schema) { export async function libraryGeneratorInternal(host: Tree, rawOptions: Schema) {
assertNotUsingTsSolutionSetup(host, 'next', 'library');
const options = await normalizeOptions(host, rawOptions); const options = await normalizeOptions(host, rawOptions);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -30,6 +30,7 @@ import {
initGenerator as jsInitGenerator, initGenerator as jsInitGenerator,
tsConfigBaseOptions, tsConfigBaseOptions,
} from '@nx/js'; } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { esbuildVersion } from '@nx/js/src/utils/versions'; import { esbuildVersion } from '@nx/js/src/utils/versions';
import { Linter, lintProjectGenerator } from '@nx/eslint'; import { Linter, lintProjectGenerator } from '@nx/eslint';
import { join } from 'path'; import { join } from 'path';
@ -390,6 +391,8 @@ export async function applicationGenerator(tree: Tree, schema: Schema) {
} }
export async function applicationGeneratorInternal(tree: Tree, schema: Schema) { export async function applicationGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'node', 'application');
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -6,6 +6,7 @@ import {
runTasksInSerial, runTasksInSerial,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion } from '../../utils/versions'; import { nxVersion } from '../../utils/versions';
import { Schema } from './schema'; import { Schema } from './schema';
@ -26,6 +27,8 @@ function updateDependencies(tree: Tree, options: Schema) {
} }
export async function initGenerator(tree: Tree, options: Schema) { export async function initGenerator(tree: Tree, options: Schema) {
assertNotUsingTsSolutionSetup(tree, 'node', 'init');
let installTask: GeneratorCallback = () => {}; let installTask: GeneratorCallback = () => {};
if (!options.skipPackageJson) { if (!options.skipPackageJson) {
installTask = updateDependencies(tree, options); installTask = updateDependencies(tree, options);

View File

@ -21,6 +21,7 @@ import {
import { libraryGenerator as jsLibraryGenerator } from '@nx/js'; import { libraryGenerator as jsLibraryGenerator } from '@nx/js';
import { addSwcConfig } from '@nx/js/src/utils/swc/add-swc-config'; import { addSwcConfig } from '@nx/js/src/utils/swc/add-swc-config';
import { addSwcDependencies } from '@nx/js/src/utils/swc/add-swc-dependencies'; import { addSwcDependencies } from '@nx/js/src/utils/swc/add-swc-dependencies';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { join } from 'path'; import { join } from 'path';
import { tslibVersion, typesNodeVersion } from '../../utils/versions'; import { tslibVersion, typesNodeVersion } from '../../utils/versions';
import { initGenerator } from '../init/init'; import { initGenerator } from '../init/init';
@ -43,6 +44,8 @@ export async function libraryGenerator(tree: Tree, schema: Schema) {
} }
export async function libraryGeneratorInternal(tree: Tree, schema: Schema) { export async function libraryGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'node', 'library');
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);
const tasks: GeneratorCallback[] = [ const tasks: GeneratorCallback[] = [
await initGenerator(tree, { await initGenerator(tree, {

View File

@ -18,6 +18,7 @@ import {
getRelativePathToRootTsConfig, getRelativePathToRootTsConfig,
initGenerator as jsInitGenerator, initGenerator as jsInitGenerator,
} from '@nx/js'; } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { updateGitIgnore } from '../../utils/update-gitignore'; import { updateGitIgnore } from '../../utils/update-gitignore';
import { Linter } from '@nx/eslint'; import { Linter } from '@nx/eslint';
import { addE2e } from './lib/add-e2e'; import { addE2e } from './lib/add-e2e';
@ -33,6 +34,8 @@ import {
} from 'nx/src/nx-cloud/utilities/onboarding'; } from 'nx/src/nx-cloud/utilities/onboarding';
export async function applicationGenerator(tree: Tree, schema: Schema) { export async function applicationGenerator(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'nuxt', 'application');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);

View File

@ -1,11 +1,14 @@
import { createProjectGraphAsync, GeneratorCallback, Tree } from '@nx/devkit'; import { createProjectGraphAsync, GeneratorCallback, Tree } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodes } from '../../plugins/plugin'; import { createNodes } from '../../plugins/plugin';
import { InitSchema } from './schema'; import { InitSchema } from './schema';
import { updateDependencies } from './lib/utils'; import { updateDependencies } from './lib/utils';
export async function nuxtInitGenerator(host: Tree, schema: InitSchema) { export async function nuxtInitGenerator(host: Tree, schema: InitSchema) {
assertNotUsingTsSolutionSetup(host, 'nuxt', 'init');
await addPluginV1( await addPluginV1(
host, host,
await createProjectGraphAsync(), await createProjectGraphAsync(),

View File

@ -20,6 +20,7 @@ import {
writeJson, writeJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { getRelativePathToRootTsConfig } from '@nx/js'; import { getRelativePathToRootTsConfig } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { typescriptVersion } from '@nx/js/src/utils/versions'; import { typescriptVersion } from '@nx/js/src/utils/versions';
import { execSync } from 'child_process'; import { execSync } from 'child_process';
import * as path from 'path'; import * as path from 'path';
@ -39,6 +40,8 @@ export async function configurationGeneratorInternal(
tree: Tree, tree: Tree,
options: ConfigurationGeneratorSchema options: ConfigurationGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'playwright', 'configuration');
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);
options.addPlugin ??= options.addPlugin ??=
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&

View File

@ -8,6 +8,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPlugin } from '@nx/devkit/src/utils/add-plugin'; import { addPlugin } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodesV2 } from '../../plugins/plugin'; import { createNodesV2 } from '../../plugins/plugin';
import { nxVersion, playwrightVersion } from '../../utils/versions'; import { nxVersion, playwrightVersion } from '../../utils/versions';
import { InitGeneratorSchema } from './schema'; import { InitGeneratorSchema } from './schema';
@ -20,6 +21,8 @@ export async function initGeneratorInternal(
tree: Tree, tree: Tree,
options: InitGeneratorSchema options: InitGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'playwright', 'init');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);

View File

@ -14,6 +14,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { libraryGenerator as jsLibraryGenerator } from '@nx/js'; import { libraryGenerator as jsLibraryGenerator } from '@nx/js';
import { addTsLibDependencies } from '@nx/js/src/utils/typescript/add-tslib-dependencies'; import { addTsLibDependencies } from '@nx/js/src/utils/typescript/add-tslib-dependencies';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion } from 'nx/src/utils/versions'; import { nxVersion } from 'nx/src/utils/versions';
import generatorGenerator from '../generator/generator'; import generatorGenerator from '../generator/generator';
import { CreatePackageSchema } from './schema'; import { CreatePackageSchema } from './schema';
@ -26,6 +27,8 @@ export async function createPackageGenerator(
host: Tree, host: Tree,
schema: CreatePackageSchema schema: CreatePackageSchema
) { ) {
assertNotUsingTsSolutionSetup(host, 'plugin', 'create-package');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeSchema(host, schema); const options = await normalizeSchema(host, schema);

View File

@ -21,6 +21,7 @@ import { addPropertyToJestConfig, configurationGenerator } from '@nx/jest';
import { getRelativePathToRootTsConfig } from '@nx/js'; import { getRelativePathToRootTsConfig } from '@nx/js';
import { setupVerdaccio } from '@nx/js/src/generators/setup-verdaccio/generator'; import { setupVerdaccio } from '@nx/js/src/generators/setup-verdaccio/generator';
import { addLocalRegistryScripts } from '@nx/js/src/utils/add-local-registry-scripts'; import { addLocalRegistryScripts } from '@nx/js/src/utils/add-local-registry-scripts';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint'; import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint';
import { join } from 'path'; import { join } from 'path';
import type { Schema } from './schema'; import type { Schema } from './schema';
@ -176,6 +177,8 @@ export async function e2eProjectGenerator(host: Tree, schema: Schema) {
} }
export async function e2eProjectGeneratorInternal(host: Tree, schema: Schema) { export async function e2eProjectGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'plugin', 'e2e-project');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
validatePlugin(host, schema.pluginName); validatePlugin(host, schema.pluginName);

View File

@ -12,6 +12,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { libraryGenerator as jsLibraryGenerator } from '@nx/js'; import { libraryGenerator as jsLibraryGenerator } from '@nx/js';
import { addSwcDependencies } from '@nx/js/src/utils/swc/add-swc-dependencies'; import { addSwcDependencies } from '@nx/js/src/utils/swc/add-swc-dependencies';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { Linter } from '@nx/eslint'; import { Linter } from '@nx/eslint';
import * as path from 'path'; import * as path from 'path';
import { e2eProjectGenerator } from '../e2e-project/e2e'; import { e2eProjectGenerator } from '../e2e-project/e2e';
@ -74,6 +75,8 @@ function updatePluginConfig(host: Tree, options: NormalizedSchema) {
} }
export async function pluginGenerator(host: Tree, schema: Schema) { export async function pluginGenerator(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'plugin', 'plugin');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -7,12 +7,15 @@ import {
updateJson, updateJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { Linter } from '@nx/eslint'; import { Linter } from '@nx/eslint';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { PackageJson } from 'nx/src/utils/package-json'; import { PackageJson } from 'nx/src/utils/package-json';
import { pluginGenerator } from '../plugin/plugin'; import { pluginGenerator } from '../plugin/plugin';
import { PresetGeneratorSchema } from './schema'; import { PresetGeneratorSchema } from './schema';
import createPackageGenerator from '../create-package/create-package'; import createPackageGenerator from '../create-package/create-package';
export default async function (tree: Tree, options: PresetGeneratorSchema) { export default async function (tree: Tree, options: PresetGeneratorSchema) {
assertNotUsingTsSolutionSetup(tree, 'plugin', 'preset');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const pluginProjectName = names( const pluginProjectName = names(
options.pluginName.includes('/') options.pluginName.includes('/')

View File

@ -9,6 +9,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { addLinting } from '../../utils/add-linting'; import { addLinting } from '../../utils/add-linting';
import { addJest } from '../../utils/add-jest'; import { addJest } from '../../utils/add-jest';
@ -40,6 +41,8 @@ export async function reactNativeApplicationGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'react-native', 'application');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -9,6 +9,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodes } from '../../../plugins/plugin'; import { createNodes } from '../../../plugins/plugin';
import { import {
nxVersion, nxVersion,
@ -30,6 +31,8 @@ export async function reactNativeInitGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
) { ) {
assertNotUsingTsSolutionSetup(host, 'react-native', 'init');
addGitIgnoreEntry(host); addGitIgnoreEntry(host);
const nxJson = readNxJson(host); const nxJson = readNxJson(host);

View File

@ -32,6 +32,7 @@ import { NormalizedSchema, normalizeOptions } from './lib/normalize-options';
import { Schema } from './schema'; import { Schema } from './schema';
import { ensureDependencies } from '../../utils/ensure-dependencies'; import { ensureDependencies } from '../../utils/ensure-dependencies';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
export async function reactNativeLibraryGenerator( export async function reactNativeLibraryGenerator(
host: Tree, host: Tree,
@ -47,6 +48,8 @@ export async function reactNativeLibraryGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'react-native', 'library');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
if (options.publishable === true && !schema.importPath) { if (options.publishable === true && !schema.importPath) {
throw new Error( throw new Error(

View File

@ -46,6 +46,7 @@ import { initGenerator as jsInitGenerator } from '@nx/js';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { setupTailwindGenerator } from '../setup-tailwind/setup-tailwind'; import { setupTailwindGenerator } from '../setup-tailwind/setup-tailwind';
import { useFlatConfig } from '@nx/eslint/src/utils/flat-config'; import { useFlatConfig } from '@nx/eslint/src/utils/flat-config';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
async function addLinting(host: Tree, options: NormalizedSchema) { async function addLinting(host: Tree, options: NormalizedSchema) {
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
@ -113,6 +114,8 @@ export async function applicationGeneratorInternal(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'react', 'application');
const tasks = []; const tasks = [];
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);

View File

@ -25,11 +25,14 @@ import { addMfEnvToTargetDefaultInputs } from '../../utils/add-mf-env-to-inputs'
import { isValidVariable } from '@nx/js'; import { isValidVariable } from '@nx/js';
import { moduleFederationEnhancedVersion } from '../../utils/versions'; import { moduleFederationEnhancedVersion } from '../../utils/versions';
import { ensureProjectName } from '@nx/devkit/src/generators/project-name-and-root-utils'; import { ensureProjectName } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
export async function hostGenerator( export async function hostGenerator(
host: Tree, host: Tree,
schema: Schema schema: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(host, 'react', 'host');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options: NormalizedSchema = { const options: NormalizedSchema = {
...(await normalizeOptions<Schema>(host, schema)), ...(await normalizeOptions<Schema>(host, schema)),

View File

@ -6,10 +6,13 @@ import {
type GeneratorCallback, type GeneratorCallback,
type Tree, type Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion, reactDomVersion, reactVersion } from '../../utils/versions'; import { nxVersion, reactDomVersion, reactVersion } from '../../utils/versions';
import { InitSchema } from './schema'; import { InitSchema } from './schema';
export async function reactInitGenerator(host: Tree, schema: InitSchema) { export async function reactInitGenerator(host: Tree, schema: InitSchema) {
assertNotUsingTsSolutionSetup(host, 'react', 'init');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
if (!schema.skipPackageJson) { if (!schema.skipPackageJson) {

View File

@ -12,6 +12,7 @@ import {
import { getRelativeCwd } from '@nx/devkit/src/generators/artifact-name-and-directory-utils'; import { getRelativeCwd } from '@nx/devkit/src/generators/artifact-name-and-directory-utils';
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js'; import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion } from '../../utils/versions'; import { nxVersion } from '../../utils/versions';
import { maybeJs } from '../../utils/maybe-js'; import { maybeJs } from '../../utils/maybe-js';
@ -36,6 +37,8 @@ export async function libraryGenerator(host: Tree, schema: Schema) {
} }
export async function libraryGeneratorInternal(host: Tree, schema: Schema) { export async function libraryGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'react', 'library');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);

View File

@ -27,6 +27,7 @@ import { maybeJs } from '../../utils/maybe-js';
import { isValidVariable } from '@nx/js'; import { isValidVariable } from '@nx/js';
import { moduleFederationEnhancedVersion } from '../../utils/versions'; import { moduleFederationEnhancedVersion } from '../../utils/versions';
import { ensureProjectName } from '@nx/devkit/src/generators/project-name-and-root-utils'; import { ensureProjectName } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
export function addModuleFederationFiles( export function addModuleFederationFiles(
host: Tree, host: Tree,
@ -90,6 +91,8 @@ export function addModuleFederationFiles(
} }
export async function remoteGenerator(host: Tree, schema: Schema) { export async function remoteGenerator(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'react', 'remote');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options: NormalizedSchema<Schema> = { const options: NormalizedSchema<Schema> = {
...(await normalizeOptions<Schema>(host, schema)), ...(await normalizeOptions<Schema>(host, schema)),

View File

@ -20,6 +20,7 @@ import { addBuildTargetDefaults } from '@nx/devkit/src/generators/target-default
import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command'; import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-command';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { extractTsConfigBase } from '@nx/js/src/utils/typescript/create-ts-config'; import { extractTsConfigBase } from '@nx/js/src/utils/typescript/create-ts-config';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { dirname } from 'node:path'; import { dirname } from 'node:path';
import { import {
createNxCloudOnboardingURLForWelcomeApp, createNxCloudOnboardingURLForWelcomeApp,
@ -56,6 +57,8 @@ export async function remixApplicationGeneratorInternal(
tree: Tree, tree: Tree,
_options: NxRemixGeneratorSchema _options: NxRemixGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'remix', 'application');
const options = await normalizeOptions(tree, _options); const options = await normalizeOptions(tree, _options);
const tasks: GeneratorCallback[] = [ const tasks: GeneratorCallback[] = [
await initGenerator(tree, { await initGenerator(tree, {

View File

@ -11,6 +11,7 @@ import {
addPlugin, addPlugin,
generateCombinations, generateCombinations,
} from '@nx/devkit/src/utils/add-plugin'; } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodesV2 } from '../../plugins/plugin'; import { createNodesV2 } from '../../plugins/plugin';
import { nxVersion, remixVersion } from '../../utils/versions'; import { nxVersion, remixVersion } from '../../utils/versions';
import { type Schema } from './schema'; import { type Schema } from './schema';
@ -20,6 +21,8 @@ export function remixInitGenerator(tree: Tree, options: Schema) {
} }
export async function remixInitGeneratorInternal(tree: Tree, options: Schema) { export async function remixInitGeneratorInternal(tree: Tree, options: Schema) {
assertNotUsingTsSolutionSetup(tree, 'remix', 'init');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
if (!options.skipPackageJson) { if (!options.skipPackageJson) {

View File

@ -1,6 +1,7 @@
import type { Tree } from '@nx/devkit'; import type { Tree } from '@nx/devkit';
import { formatFiles, GeneratorCallback, runTasksInSerial } from '@nx/devkit'; import { formatFiles, GeneratorCallback, runTasksInSerial } from '@nx/devkit';
import { Linter } from '@nx/eslint'; import { Linter } from '@nx/eslint';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { libraryGenerator } from '@nx/react'; import { libraryGenerator } from '@nx/react';
import { import {
addTsconfigEntryPoints, addTsconfigEntryPoints,
@ -21,6 +22,8 @@ export async function remixLibraryGeneratorInternal(
tree: Tree, tree: Tree,
schema: NxRemixGeneratorSchema schema: NxRemixGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'remix', 'library');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);

View File

@ -1,4 +1,5 @@
import { ensurePackage, formatFiles, runTasksInSerial, Tree } from '@nx/devkit'; import { ensurePackage, formatFiles, runTasksInSerial, Tree } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { version as nxVersion } from 'nx/package.json'; import { version as nxVersion } from 'nx/package.json';
import configurationGenerator from '../configuration/configuration'; import configurationGenerator from '../configuration/configuration';
import rspackInitGenerator from '../init/init'; import rspackInitGenerator from '../init/init';
@ -9,6 +10,8 @@ export default async function (
tree: Tree, tree: Tree,
_options: ApplicationGeneratorSchema _options: ApplicationGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'rspack', 'application');
const tasks = []; const tasks = [];
const initTask = await rspackInitGenerator(tree, { const initTask = await rspackInitGenerator(tree, {
..._options, ..._options,

View File

@ -5,6 +5,7 @@ import {
readProjectConfiguration, readProjectConfiguration,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { import {
addOrChangeBuildTarget, addOrChangeBuildTarget,
addOrChangeServeTarget, addOrChangeServeTarget,
@ -25,6 +26,8 @@ export async function configurationGenerator(
tree: Tree, tree: Tree,
options: ConfigurationSchema options: ConfigurationSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'rspack', 'configuration');
const task = await rspackInitGenerator(tree, { const task = await rspackInitGenerator(tree, {
...options, ...options,
// TODO: Crystalize the default rspack.config.js file. // TODO: Crystalize the default rspack.config.js file.

View File

@ -9,6 +9,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { addPlugin } from '@nx/devkit/src/utils/add-plugin'; import { addPlugin } from '@nx/devkit/src/utils/add-plugin';
import { initGenerator } from '@nx/js'; import { initGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodesV2 } from '../../../plugin'; import { createNodesV2 } from '../../../plugin';
import { import {
lessLoaderVersion, lessLoaderVersion,
@ -24,6 +25,8 @@ export async function rspackInitGenerator(
tree: Tree, tree: Tree,
schema: InitGeneratorSchema schema: InitGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'rspack', 'init');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);

View File

@ -9,6 +9,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { StorybookConfigureSchema } from './schema'; import { StorybookConfigureSchema } from './schema';
import { initGenerator } from '../init/init'; import { initGenerator } from '../init/init';
@ -59,6 +60,8 @@ export async function configurationGeneratorInternal(
tree: Tree, tree: Tree,
rawSchema: StorybookConfigureSchema rawSchema: StorybookConfigureSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'storybook', 'configuration');
const storybookMajor = storybookMajorVersion(); const storybookMajor = storybookMajorVersion();
if (storybookMajor > 0 && storybookMajor === 6) { if (storybookMajor > 0 && storybookMajor === 6) {
throw new Error(pleaseUpgrade()); throw new Error(pleaseUpgrade());

View File

@ -15,6 +15,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { Linter, LinterType } from '@nx/eslint'; import { Linter, LinterType } from '@nx/eslint';
import { determineProjectNameAndRootOptions } from '@nx/devkit/src/generators/project-name-and-root-utils'; import { determineProjectNameAndRootOptions } from '@nx/devkit/src/generators/project-name-and-root-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { join } from 'path'; import { join } from 'path';
import { safeFileDelete } from '../../utils/utilities'; import { safeFileDelete } from '../../utils/utilities';
@ -34,6 +35,8 @@ export async function cypressProjectGenerator(
tree: Tree, tree: Tree,
schema: CypressConfigureSchema schema: CypressConfigureSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'cypress', 'cypress-project');
logger.warn( logger.warn(
`Use 'interactionTests' instead when running '@nx/storybook:configuration'. This generator will be removed in v21.` `Use 'interactionTests' instead when running '@nx/storybook:configuration'. This generator will be removed in v21.`
); );

View File

@ -11,6 +11,7 @@ import {
updateNxJson, updateNxJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { gte } from 'semver'; import { gte } from 'semver';
import { createNodes } from '../../plugins/plugin'; import { createNodes } from '../../plugins/plugin';
import { import {
@ -95,6 +96,8 @@ export function initGenerator(tree: Tree, schema: Schema) {
} }
export async function initGeneratorInternal(tree: Tree, schema: Schema) { export async function initGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'storybook', 'init');
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);
const addPluginDefault = const addPluginDefault =
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&

View File

@ -9,6 +9,7 @@ import {
} from '@nx/devkit'; } from '@nx/devkit';
import { Linter } from '@nx/eslint'; import { Linter } from '@nx/eslint';
import { initGenerator as jsInitGenerator } from '@nx/js'; import { initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { Schema } from './schema'; import { Schema } from './schema';
import { normalizeOptions } from './lib/normalize-options'; import { normalizeOptions } from './lib/normalize-options';
import { vueInitGenerator } from '../init/init'; import { vueInitGenerator } from '../init/init';
@ -28,6 +29,8 @@ export async function applicationGeneratorInternal(
tree: Tree, tree: Tree,
_options: Schema _options: Schema
): Promise<GeneratorCallback> { ): Promise<GeneratorCallback> {
assertNotUsingTsSolutionSetup(tree, 'vue', 'application');
const options = await normalizeOptions(tree, _options); const options = await normalizeOptions(tree, _options);
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);

View File

@ -6,6 +6,7 @@ import {
runTasksInSerial, runTasksInSerial,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion, vueVersion } from '../../utils/versions'; import { nxVersion, vueVersion } from '../../utils/versions';
import { InitSchema } from './schema'; import { InitSchema } from './schema';
@ -27,6 +28,8 @@ function updateDependencies(host: Tree, schema: InitSchema) {
} }
export async function vueInitGenerator(host: Tree, schema: InitSchema) { export async function vueInitGenerator(host: Tree, schema: InitSchema) {
assertNotUsingTsSolutionSetup(host, 'vue', 'init');
let installTask: GeneratorCallback = () => {}; let installTask: GeneratorCallback = () => {};
if (!schema.skipPackageJson) { if (!schema.skipPackageJson) {
installTask = updateDependencies(host, schema); installTask = updateDependencies(host, schema);

View File

@ -9,6 +9,7 @@ import {
updateJson, updateJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js'; import { addTsConfigPath, initGenerator as jsInitGenerator } from '@nx/js';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { vueInitGenerator } from '../init/init'; import { vueInitGenerator } from '../init/init';
import { Schema } from './schema'; import { Schema } from './schema';
import { normalizeOptions } from './lib/normalize-options'; import { normalizeOptions } from './lib/normalize-options';
@ -27,6 +28,8 @@ export function libraryGenerator(tree: Tree, schema: Schema) {
} }
export async function libraryGeneratorInternal(tree: Tree, schema: Schema) { export async function libraryGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'vue', 'library');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const options = await normalizeOptions(tree, schema); const options = await normalizeOptions(tree, schema);

View File

@ -49,6 +49,7 @@ import { logShowProjectCommand } from '@nx/devkit/src/utils/log-show-project-com
import staticServeConfiguration from '../static-serve/static-serve-configuration'; import staticServeConfiguration from '../static-serve/static-serve-configuration';
import { findPluginForConfigFile } from '@nx/devkit/src/utils/find-plugin-for-config-file'; import { findPluginForConfigFile } from '@nx/devkit/src/utils/find-plugin-for-config-file';
import { E2EWebServerDetails } from '@nx/devkit/src/generators/e2e-web-server-info-utils'; import { E2EWebServerDetails } from '@nx/devkit/src/generators/e2e-web-server-info-utils';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
interface NormalizedSchema extends Schema { interface NormalizedSchema extends Schema {
projectName: string; projectName: string;
@ -257,6 +258,8 @@ export async function applicationGenerator(host: Tree, schema: Schema) {
} }
export async function applicationGeneratorInternal(host: Tree, schema: Schema) { export async function applicationGeneratorInternal(host: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(host, 'web', 'application');
const options = await normalizeOptions(host, schema); const options = await normalizeOptions(host, schema);
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];

View File

@ -6,6 +6,7 @@ import {
runTasksInSerial, runTasksInSerial,
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { nxVersion } from '../../utils/versions'; import { nxVersion } from '../../utils/versions';
import { Schema } from './schema'; import { Schema } from './schema';
@ -26,6 +27,8 @@ function updateDependencies(tree: Tree, schema: Schema) {
} }
export async function webInitGenerator(tree: Tree, schema: Schema) { export async function webInitGenerator(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'web', 'init');
let installTask: GeneratorCallback = () => {}; let installTask: GeneratorCallback = () => {};
if (!schema.skipPackageJson) { if (!schema.skipPackageJson) {
installTask = updateDependencies(tree, schema); installTask = updateDependencies(tree, schema);

View File

@ -17,6 +17,7 @@ import { WebpackExecutorOptions } from '../../executors/webpack/schema';
import { hasPlugin } from '../../utils/has-plugin'; import { hasPlugin } from '../../utils/has-plugin';
import { addBuildTargetDefaults } from '@nx/devkit/src/generators/target-defaults-utils'; import { addBuildTargetDefaults } from '@nx/devkit/src/generators/target-defaults-utils';
import { ensureDependencies } from '../../utils/ensure-dependencies'; import { ensureDependencies } from '../../utils/ensure-dependencies';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
export function configurationGenerator( export function configurationGenerator(
tree: Tree, tree: Tree,
@ -29,6 +30,8 @@ export async function configurationGeneratorInternal(
tree: Tree, tree: Tree,
options: ConfigurationGeneratorSchema options: ConfigurationGeneratorSchema
) { ) {
assertNotUsingTsSolutionSetup(tree, 'webpack', 'configuration');
const tasks: GeneratorCallback[] = []; const tasks: GeneratorCallback[] = [];
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);
const addPluginDefault = const addPluginDefault =

View File

@ -7,6 +7,7 @@ import {
Tree, Tree,
} from '@nx/devkit'; } from '@nx/devkit';
import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin'; import { addPluginV1 } from '@nx/devkit/src/utils/add-plugin';
import { assertNotUsingTsSolutionSetup } from '@nx/js/src/utils/typescript/ts-solution-setup';
import { createNodes } from '../../plugins/plugin'; import { createNodes } from '../../plugins/plugin';
import { nxVersion, webpackCliVersion } from '../../utils/versions'; import { nxVersion, webpackCliVersion } from '../../utils/versions';
import { Schema } from './schema'; import { Schema } from './schema';
@ -16,6 +17,8 @@ export function webpackInitGenerator(tree: Tree, schema: Schema) {
} }
export async function webpackInitGeneratorInternal(tree: Tree, schema: Schema) { export async function webpackInitGeneratorInternal(tree: Tree, schema: Schema) {
assertNotUsingTsSolutionSetup(tree, 'webpack', 'init');
const nxJson = readNxJson(tree); const nxJson = readNxJson(tree);
const addPluginDefault = const addPluginDefault =
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&

View File

@ -1563,6 +1563,24 @@ Pass \`--dry-run\` to see what would happen without actually releasing the libra
[Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) [Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Keep TypeScript project references up to date
Nx automatically updates TypeScript [project references](https://www.typescriptlang.org/docs/handbook/project-references.html) in \`tsconfig.json\` files to ensure they remain accurate based on your project dependencies (\`import\` or \`require\` statements). This sync is automatically done when running tasks such as \`build\` or \`typecheck\`, which require updated references to function correctly.
To manually trigger the process to sync the project graph dependencies information to the TypeScript project references, run the following command:
\`\`\`sh
npx nx sync
\`\`\`
You can enforce that the TypeScript project references are always in the correct state when running in CI by adding a step to your CI job configuration that runs the following command:
\`\`\`sh
npx nx sync:check
\`\`\`
[Learn more about nx sync](https://nx.dev/reference/nx-commands#sync)
[Learn more about Nx on CI](https://nx.dev/ci/intro/ci-with-nx#ready-get-started-with-your-provider?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) [Learn more about Nx on CI](https://nx.dev/ci/intro/ci-with-nx#ready-get-started-with-your-provider?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Install Nx Console ## Install Nx Console
@ -3832,6 +3850,24 @@ Pass \`--dry-run\` to see what would happen without actually releasing the libra
[Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) [Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Keep TypeScript project references up to date
Nx automatically updates TypeScript [project references](https://www.typescriptlang.org/docs/handbook/project-references.html) in \`tsconfig.json\` files to ensure they remain accurate based on your project dependencies (\`import\` or \`require\` statements). This sync is automatically done when running tasks such as \`build\` or \`typecheck\`, which require updated references to function correctly.
To manually trigger the process to sync the project graph dependencies information to the TypeScript project references, run the following command:
\`\`\`sh
npx nx sync
\`\`\`
You can enforce that the TypeScript project references are always in the correct state when running in CI by adding a step to your CI job configuration that runs the following command:
\`\`\`sh
npx nx sync:check
\`\`\`
[Learn more about nx sync](https://nx.dev/reference/nx-commands#sync)
## Set up CI! ## Set up CI!
### Step 1 ### Step 1
@ -5836,6 +5872,24 @@ Pass \`--dry-run\` to see what would happen without actually releasing the libra
[Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) [Learn more about Nx release &raquo;](hhttps://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Keep TypeScript project references up to date
Nx automatically updates TypeScript [project references](https://www.typescriptlang.org/docs/handbook/project-references.html) in \`tsconfig.json\` files to ensure they remain accurate based on your project dependencies (\`import\` or \`require\` statements). This sync is automatically done when running tasks such as \`build\` or \`typecheck\`, which require updated references to function correctly.
To manually trigger the process to sync the project graph dependencies information to the TypeScript project references, run the following command:
\`\`\`sh
npx nx sync
\`\`\`
You can enforce that the TypeScript project references are always in the correct state when running in CI by adding a step to your CI job configuration that runs the following command:
\`\`\`sh
npx nx sync:check
\`\`\`
[Learn more about nx sync](https://nx.dev/reference/nx-commands#sync)
[Learn more about Nx on CI](https://nx.dev/ci/intro/ci-with-nx#ready-get-started-with-your-provider?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) [Learn more about Nx on CI](https://nx.dev/ci/intro/ci-with-nx#ready-get-started-with-your-provider?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Install Nx Console ## Install Nx Console

View File

@ -1,8 +1,6 @@
{ {
"recommendations": [ "recommendations": [<% if(cliCommand === 'ng') { %>
<% if(cliCommand === 'ng') { %> "angular.ng-template",<% } %>
"angular.ng-template",<% }
%>
"nrwl.angular-console" "nrwl.angular-console"
] ]
} }

View File

@ -276,7 +276,7 @@ function createFiles(tree: Tree, options: NormalizedSchema) {
? './files-root-app' ? './files-root-app'
: (options.preset === Preset.TS && : (options.preset === Preset.TS &&
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true') || process.env.NX_ADD_TS_PLUGIN !== 'false') ||
options.preset === Preset.NPM options.preset === Preset.NPM
? './files-package-based-repo' ? './files-package-based-repo'
: './files-integrated-repo'; : './files-integrated-repo';
@ -315,7 +315,7 @@ async function createReadme(
isTsPreset: preset === Preset.TS, isTsPreset: preset === Preset.TS,
isUsingNewTsSolutionSetup: isUsingNewTsSolutionSetup:
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true', process.env.NX_ADD_TS_PLUGIN !== 'false',
isEmptyRepo: !appName, isEmptyRepo: !appName,
appName, appName,
generateAppCmd: presetInfo.generateAppCmd, generateAppCmd: presetInfo.generateAppCmd,
@ -416,7 +416,7 @@ function setUpWorkspacesInPackageJson(tree: Tree, options: NormalizedSchema) {
options.preset === Preset.NPM || options.preset === Preset.NPM ||
(options.preset === Preset.TS && (options.preset === Preset.TS &&
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true') process.env.NX_ADD_TS_PLUGIN !== 'false')
) { ) {
if (options.packageManager === 'pnpm') { if (options.packageManager === 'pnpm') {
tree.write( tree.write(

View File

@ -262,7 +262,7 @@ async function createPreset(tree: Tree, options: Schema) {
formatter: options.formatter, formatter: options.formatter,
addTsPlugin: addTsPlugin:
process.env.NX_ADD_PLUGINS !== 'false' && process.env.NX_ADD_PLUGINS !== 'false' &&
process.env.NX_ADD_TS_PLUGIN === 'true', process.env.NX_ADD_TS_PLUGIN !== 'false',
}); });
} else if (options.preset === Preset.TsStandalone) { } else if (options.preset === Preset.TsStandalone) {
const { libraryGenerator } = require('@nx' + '/js'); const { libraryGenerator } = require('@nx' + '/js');