diff --git a/packages/scripts/__tests__/config/WebpackConfigHelper.spec.ts b/packages/scripts/__tests__/config/WebpackConfigHelper.spec.ts index 74b3d8c74..dd7e011a4 100644 --- a/packages/scripts/__tests__/config/WebpackConfigHelper.spec.ts +++ b/packages/scripts/__tests__/config/WebpackConfigHelper.spec.ts @@ -232,6 +232,88 @@ describe('WebpackConfigHelper', () => { } }); + test('does not set babel-loader for node_modules in dev mode per config', () => { + const newProjectConfig = { ...projectConfig }; + newProjectConfig.compileNodeModules = { + dev: false, + prod: true, + }; + const cwc = new WebpackConfigHelper( + newProjectConfig.files[0], + getConfigFromProjectAndServer(newProjectConfig, serverConfig), + '/foo/bar', + true + ); + const modules = cwc.getModule(); + if (Array.isArray(modules.rules)) { + const nmJsRules = findWpackIoBabelOnNm(modules); + expect(nmJsRules).toHaveLength(0); + } else { + throw new Error('Module is not an array'); + } + }); + test('does set babel-loader for node_modules in dev mode per config', () => { + const newProjectConfig = { ...projectConfig }; + newProjectConfig.compileNodeModules = { + dev: true, + prod: false, + }; + const cwc = new WebpackConfigHelper( + newProjectConfig.files[0], + getConfigFromProjectAndServer(newProjectConfig, serverConfig), + '/foo/bar', + true + ); + const modules = cwc.getModule(); + if (Array.isArray(modules.rules)) { + const nmJsRules = findWpackIoBabelOnNm(modules); + expect(nmJsRules).toHaveLength(1); + } else { + throw new Error('Module is not an array'); + } + }); + + test('does not set babel-loader for node_modules in prod mode per config', () => { + const newProjectConfig = { ...projectConfig }; + newProjectConfig.compileNodeModules = { + dev: true, + prod: false, + }; + const cwc = new WebpackConfigHelper( + newProjectConfig.files[0], + getConfigFromProjectAndServer(newProjectConfig, serverConfig), + '/foo/bar', + false + ); + const modules = cwc.getModule(); + if (Array.isArray(modules.rules)) { + const nmJsRules = findWpackIoBabelOnNm(modules); + expect(nmJsRules).toHaveLength(0); + } else { + throw new Error('Module is not an array'); + } + }); + test('does set babel-loader for node_modules in prod mode per config', () => { + const newProjectConfig = { ...projectConfig }; + newProjectConfig.compileNodeModules = { + dev: false, + prod: true, + }; + const cwc = new WebpackConfigHelper( + newProjectConfig.files[0], + getConfigFromProjectAndServer(newProjectConfig, serverConfig), + '/foo/bar', + false + ); + const modules = cwc.getModule(); + if (Array.isArray(modules.rules)) { + const nmJsRules = findWpackIoBabelOnNm(modules); + expect(nmJsRules).toHaveLength(1); + } else { + throw new Error('Module is not an array'); + } + }); + test('obeys hasFlow & hasRect', () => { const cwc = new WebpackConfigHelper( projectConfig.files[0], diff --git a/packages/scripts/__tests__/helpers/testUtils.ts b/packages/scripts/__tests__/helpers/testUtils.ts index 2529f0ac2..1be62477f 100644 --- a/packages/scripts/__tests__/helpers/testUtils.ts +++ b/packages/scripts/__tests__/helpers/testUtils.ts @@ -45,6 +45,10 @@ export function getConfigFromProjectAndServer( pCfg: ProjectConfig, sCfg: ServerConfig ): WebpackConfigHelperConfig { + const compileNodeModules = pCfg.compileNodeModules ?? { + dev: true, + prod: true, + }; return { appName: pCfg.appName, type: pCfg.type, @@ -66,8 +70,8 @@ export function getConfigFromProjectAndServer( externals: pCfg.externals, useBabelConfig: false, compileNodeModules: { - dev: true, - prod: true, + dev: compileNodeModules.dev ?? true, + prod: compileNodeModules.prod ?? true, }, useReactJsxRuntime: true, };