From 98722613d1dba52b533d1968acf7d91577e6c10f Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Fri, 16 Dec 2022 00:44:19 +0200 Subject: [PATCH] fix(vite): set mode in configuration (#13856) (cherry picked from commit f4802ae5794a3384d70781117b793e25f7df0f40) --- packages/vite/migrations.json | 6 ++++ .../set-mode-in-configuration.spec.ts | 32 +++++++++++++++++ .../set-mode-in-configuration.ts | 36 +++++++++++++++++++ packages/vite/src/utils/generator-utils.ts | 16 +++++---- packages/vite/src/utils/options-utils.ts | 2 +- .../test-files/react-vite-project.config.json | 6 +++- packages/vite/src/utils/test-utils.ts | 2 +- 7 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.spec.ts create mode 100644 packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.ts diff --git a/packages/vite/migrations.json b/packages/vite/migrations.json index 6dbc898d84dd2..916565ad821c3 100644 --- a/packages/vite/migrations.json +++ b/packages/vite/migrations.json @@ -5,6 +5,12 @@ "version": "15.3.1-beta.0", "description": "Remove projects property from vite-tsconfig-paths plugin in vite.config.ts files.", "factory": "./src/migrations/update-15-3-1/update-vite-tsconfig-paths" + }, + "set-mode-in-configurations": { + "cli": "nx", + "version": "15.3.4-beta.0", + "description": "Set the mode in configurations to match the configurationName.", + "factory": "./src/migrations/update-15-3-4/set-mode-in-configuration" } }, "packageJsonUpdates": { diff --git a/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.spec.ts b/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.spec.ts new file mode 100644 index 0000000000000..dc745d4a8440b --- /dev/null +++ b/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.spec.ts @@ -0,0 +1,32 @@ +import { readProjectConfiguration, Tree } from '@nrwl/devkit'; +import { createTreeWithEmptyV1Workspace } from '@nrwl/devkit/testing'; +import { mockViteReactAppGenerator } from '../../utils/test-utils'; +import { setModeInConfiguration } from './set-mode-in-configuration'; + +describe('set mode in configuration object', () => { + let tree: Tree; + + beforeEach(() => { + tree = createTreeWithEmptyV1Workspace(); + mockViteReactAppGenerator(tree); + }); + + it('should set the mode to be the configuration name and preserve other settings', async () => { + await setModeInConfiguration(tree); + + const projectConfig = readProjectConfiguration( + tree, + 'my-test-react-vite-app' + ); + + expect(projectConfig.targets.build.configurations.production.mode).toEqual( + 'production' + ); + + expect(projectConfig.targets.build.configurations.ssr.mode).toEqual('ssr'); + expect(projectConfig.targets.build.configurations.ssr.ssr).toBeTruthy(); + expect( + projectConfig.targets.build.configurations.ssr['my-other-setting'] + ).toBe('my-other-value'); + }); +}); diff --git a/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.ts b/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.ts new file mode 100644 index 0000000000000..bc0e387c20d22 --- /dev/null +++ b/packages/vite/src/migrations/update-15-3-4/set-mode-in-configuration.ts @@ -0,0 +1,36 @@ +import { + formatFiles, + readProjectConfiguration, + Tree, + updateProjectConfiguration, +} from '@nrwl/devkit'; + +import { forEachExecutorOptions } from '@nrwl/workspace/src/utilities/executor-options-utils'; + +export async function setModeInConfiguration(tree: Tree) { + forAllProjectsUsingViteAddMode(tree); + await formatFiles(tree); +} + +export default setModeInConfiguration; + +function forAllProjectsUsingViteAddMode(tree: Tree): void { + forEachExecutorOptions( + tree, + '@nrwl/vite:build', + (_options, projectName, targetName, configuration) => { + if (!configuration) { + return; + } + + const projectConfiguration = readProjectConfiguration(tree, projectName); + projectConfiguration.targets[targetName].configurations[ + configuration + ].mode ??= configuration; + + updateProjectConfiguration(tree, projectName, { + ...projectConfiguration, + }); + } + ); +} diff --git a/packages/vite/src/utils/generator-utils.ts b/packages/vite/src/utils/generator-utils.ts index 46adee9081d13..b5aeecc85f8b5 100644 --- a/packages/vite/src/utils/generator-utils.ts +++ b/packages/vite/src/utils/generator-utils.ts @@ -130,11 +130,11 @@ export function addOrChangeBuildTarget( }; if (targets[target]) { - buildOptions.fileReplacements = targets[target].options.fileReplacements; + buildOptions.fileReplacements = targets[target].options?.fileReplacements; - if (target === '@nxext/vite:build') { - buildOptions.base = targets[target].options.baseHref; - buildOptions.sourcemap = targets[target].options.sourcemaps; + if (targets[target].executor === '@nxext/vite:build') { + buildOptions.base = targets[target].options?.baseHref; + buildOptions.sourcemap = targets[target].options?.sourcemaps; } targets[target].options = { ...buildOptions, @@ -147,8 +147,12 @@ export function addOrChangeBuildTarget( defaultConfiguration: 'production', options: buildOptions, configurations: { - development: {}, - production: {}, + development: { + mode: 'development', + }, + production: { + mode: 'production', + }, }, }; } diff --git a/packages/vite/src/utils/options-utils.ts b/packages/vite/src/utils/options-utils.ts index 2357a36d4cafc..1601d1167ffc9 100644 --- a/packages/vite/src/utils/options-utils.ts +++ b/packages/vite/src/utils/options-utils.ts @@ -29,7 +29,7 @@ export async function getBuildAndSharedConfig( const projectRoot = context.workspace.projects[context.projectName].root; return mergeConfig({}, { - mode: options.mode ?? context.configurationName, + mode: options.mode, root: projectRoot, base: options.base, configFile: normalizeConfigFilePath( diff --git a/packages/vite/src/utils/test-files/react-vite-project.config.json b/packages/vite/src/utils/test-files/react-vite-project.config.json index 55d847866602d..8bf59239cb445 100644 --- a/packages/vite/src/utils/test-files/react-vite-project.config.json +++ b/packages/vite/src/utils/test-files/react-vite-project.config.json @@ -14,7 +14,11 @@ }, "configurations": { "development": {}, - "production": {} + "production": {}, + "ssr": { + "ssr": true, + "my-other-setting": "my-other-value" + } } }, "serve": { diff --git a/packages/vite/src/utils/test-utils.ts b/packages/vite/src/utils/test-utils.ts index 4faf674f72b9c..e7148104bbd62 100644 --- a/packages/vite/src/utils/test-utils.ts +++ b/packages/vite/src/utils/test-utils.ts @@ -1,4 +1,4 @@ -import { Tree, writeJson } from '@nrwl/devkit'; +import { parseJson, Tree, writeJson } from '@nrwl/devkit'; import * as reactAppConfig from './test-files/react-project.config.json'; import * as reactViteConfig from './test-files/react-vite-project.config.json'; import * as webAppConfig from './test-files/web-project.config.json';