From 5c24c73dde9bcfa52ea92c637df9ea676b61a8cf Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Wed, 3 Apr 2024 16:57:05 -0400 Subject: [PATCH] fix(webpack): support standard webpack config with @nx/webpack:dev-server --- e2e/webpack/src/webpack.legacy.test.ts | 44 +++++++++++++++++++ .../executors/dev-server/dev-server.impl.ts | 4 ++ 2 files changed, 48 insertions(+) diff --git a/e2e/webpack/src/webpack.legacy.test.ts b/e2e/webpack/src/webpack.legacy.test.ts index 8c8b61d27f51f..02a2fca5d796d 100644 --- a/e2e/webpack/src/webpack.legacy.test.ts +++ b/e2e/webpack/src/webpack.legacy.test.ts @@ -5,6 +5,7 @@ import { newProject, runCLI, runCommandUntil, + runE2ETests, uniq, updateFile, } from '@nx/e2e/utils'; @@ -102,4 +103,47 @@ describe('Webpack Plugin (legacy)', () => { checkFilesExist(`dist/${appName}/styles.css`); }).toThrow(); }); + + it('should support standard webpack config with executors', () => { + const appName = uniq('app'); + runCLI( + `generate @nx/web:app ${appName} --bundler webpack --e2eTestRunner=playwright` + ); + updateFile( + `${appName}/src/main.ts`, + ` + document.querySelector('proj-root').innerHTML = '

Welcome

'; + ` + ); + updateFile( + `${appName}/webpack.config.js`, + ` + const { join } = require('path'); + const {NxWebpackPlugin} = require('@nx/webpack'); + module.exports = { + output: { + path: join(__dirname, '../dist/app9524918'), + }, + plugins: [ + new NxWebpackPlugin({ + main: './src/main.ts', + compiler: 'tsc', + index: './src/index.html', + tsConfig: './tsconfig.app.json', + }) + ] + }; + ` + ); + + expect(() => { + runCLI(`build ${appName} --outputHashing none`); + }).not.toThrow(); + + if (runE2ETests()) { + expect(() => { + runCLI(`e2e ${appName}-e2e`); + }).not.toThrow(); + } + }); }); diff --git a/packages/webpack/src/executors/dev-server/dev-server.impl.ts b/packages/webpack/src/executors/dev-server/dev-server.impl.ts index 4fe775f47312d..731bbaa74603d 100644 --- a/packages/webpack/src/executors/dev-server/dev-server.impl.ts +++ b/packages/webpack/src/executors/dev-server/dev-server.impl.ts @@ -100,6 +100,10 @@ export async function* devServerExecutor( configuration: serveOptions.buildTarget.split(':')[2], } ); + } else if (userDefinedWebpackConfig) { + // New behavior, we want the webpack config to export object + config = userDefinedWebpackConfig; + config.devServer ??= devServer; } }