Skip to content

Commit

Permalink
fix(react): set mode correctly when serve --prod is used (#10235)
Browse files Browse the repository at this point in the history
Fixes #10199
  • Loading branch information
jaysoo committed May 10, 2022
1 parent e674be7 commit fecbb81
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 10 deletions.
3 changes: 0 additions & 3 deletions packages/web/src/executors/dev-server/dev-server.impl.ts
Expand Up @@ -113,9 +113,6 @@ function getBuildOptions(
): WebWebpackExecutorOptions {
const target = parseTargetString(options.buildTarget);

// TODO(jack): [Nx 14] Remove this line once we generate `development` configuration by default + add migration for it if missing
target.configuration ??= '';

const overrides: Partial<WebWebpackExecutorOptions> = {
watch: false,
};
Expand Down
84 changes: 84 additions & 0 deletions packages/web/src/utils/devserver.config.spec.ts
@@ -0,0 +1,84 @@
import { getDevServerConfig } from '@nrwl/web/src/utils/devserver.config';

jest.mock('./webpack/partials/common', () => ({
getCommonConfig: () => ({
output: {},
resolve: {},
}),
getCommonPartial: () => ({}),
}));

jest.mock('tsconfig-paths-webpack-plugin', () => ({
TsconfigPathsPlugin: class TsconfigPathsPlugin {},
}));

describe('getDevServerConfig', () => {
it('should set mode to production when optimization is on', () => {
const result = getDevServerConfig(
'/',
'/app',
'/app/src',
{
optimization: true,
root: '/app',
sourceRoot: '/app/src',
main: '/app/src/main.ts',
outputPath: '/dist/app',
tsConfig: '/app/tsconfig.app.json',
compiler: 'babel',
assets: [],
fileReplacements: [],
index: '/app/src/index.html',
scripts: [],
styles: [],
},
{
buildTarget: 'app:build:production',
allowedHosts: '',
liveReload: false,
hmr: false,
ssl: false,
watch: false,
open: false,
host: 'localhost',
port: 4200,
}
);

expect(result.mode).toEqual('production');
});

it('should set mode to development when optimization is off', () => {
const result = getDevServerConfig(
'/',
'/app',
'/app/src',
{
root: '/app',
sourceRoot: '/app/src',
main: '/app/src/main.ts',
outputPath: '/dist/app',
tsConfig: '/app/tsconfig.app.json',
compiler: 'babel',
assets: [],
fileReplacements: [],
index: '/app/src/index.html',
scripts: [],
styles: [],
},
{
buildTarget: 'app:build:development',
allowedHosts: '',
liveReload: false,
hmr: false,
ssl: false,
watch: false,
open: false,
host: 'localhost',
port: 4200,
}
);

expect(result.mode).toEqual('development');
});
});
15 changes: 9 additions & 6 deletions packages/web/src/utils/devserver.config.ts
@@ -1,5 +1,6 @@
import { logger } from '@nrwl/devkit';
import { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';
import type { Configuration as WebpackConfiguration } from 'webpack';
import type { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';
import * as path from 'path';
import { basename, resolve } from 'path';

Expand All @@ -18,14 +19,16 @@ export function getDevServerConfig(
sourceRoot: string,
buildOptions: WebWebpackExecutorOptions,
serveOptions: WebDevServerOptions
): Partial<WebpackDevServerConfiguration> {
): Partial<WebpackConfiguration> {
const webpackConfig = getWebConfig(
workspaceRoot,
projectRoot,
sourceRoot,
buildOptions,
true, // Don't need to support legacy browsers for dev.
false
true,
typeof buildOptions.optimization === 'boolean'
? buildOptions.optimization
: buildOptions.optimization?.scripts
);

(webpackConfig as any).devServer = getDevServerPartial(
Expand Down Expand Up @@ -56,7 +59,7 @@ export function getDevServerConfig(
})
);

return webpackConfig as any;
return webpackConfig as WebpackConfiguration;
}

function getDevServerPartial(
Expand All @@ -67,7 +70,7 @@ function getDevServerPartial(
const servePath = buildServePath(buildOptions);

const { scripts: scriptsOptimization, styles: stylesOptimization } =
buildOptions.optimization as OptimizationOptions;
(buildOptions.optimization || {}) as OptimizationOptions;

const config: WebpackDevServerConfiguration = {
host: options.host,
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/utils/webpack/partials/styles.ts
Expand Up @@ -150,7 +150,7 @@ export function getStylesConfig(
? true
: typeof buildOptions.optimization === 'boolean'
? !buildOptions.optimization
: buildOptions.optimization.styles &&
: buildOptions.optimization?.styles &&
// Inline all sourcemap types except hidden ones, which are the same as no sourcemaps
// for component css.
buildOptions.sourceMap !== 'hidden');
Expand Down

0 comments on commit fecbb81

Please sign in to comment.