From 959c1a114c27be83013bbee5ba6be35e8e876bb4 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 4 Nov 2020 13:57:11 +0100 Subject: [PATCH 1/3] Allow @next plugins to be loaded without experimental flag --- .../next/build/plugins/collect-plugins.ts | 1 - packages/next/build/webpack-config.ts | 32 ++++++------------- .../webpack/loaders/next-babel-loader.js | 10 ------ packages/next/next-server/server/config.ts | 1 - .../next/next-server/server/next-server.ts | 2 +- .../src/babel-preset-build.js | 4 --- 6 files changed, 10 insertions(+), 40 deletions(-) delete mode 100644 test/integration/next-plugins/app/node_modules/@next/plugin-google-analytics/src/babel-preset-build.js diff --git a/packages/next/build/plugins/collect-plugins.ts b/packages/next/build/plugins/collect-plugins.ts index ad9b4ebfc4c38..5e450386485d7 100644 --- a/packages/next/build/plugins/collect-plugins.ts +++ b/packages/next/build/plugins/collect-plugins.ts @@ -21,7 +21,6 @@ export const VALID_MIDDLEWARE = [ 'on-init-server', 'on-error-client', 'on-error-server', - 'babel-preset-build', ] type ENV_OPTIONS = { [name: string]: string } diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 3e552304226b1..4373d2a16f8c7 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -210,24 +210,15 @@ export default async function getBaseWebpackConfig( ): Promise { const productionBrowserSourceMaps = config.experimental.productionBrowserSourceMaps && !isServer - let plugins: PluginMetaData[] = [] - let babelPresetPlugins: { dir: string; config: any }[] = [] + let plugins: PluginMetaData[] = await collectPlugins( + dir, + config.env, + config.plugins + ) const hasRewrites = rewrites.length > 0 || dev - if (config.experimental.plugins) { - plugins = await collectPlugins(dir, config.env, config.plugins) - pluginLoaderOptions.plugins = plugins - - for (const plugin of plugins) { - if (plugin.middleware.includes('babel-preset-build')) { - babelPresetPlugins.push({ - dir: plugin.directory, - config: plugin.config, - }) - } - } - } + pluginLoaderOptions.plugins = plugins const reactVersion = await getPackageVersion({ cwd: dir, name: 'react' }) const hasReactRefresh: boolean = dev && !isServer @@ -248,7 +239,6 @@ export default async function getBaseWebpackConfig( cwd: dir, // Webpack 5 has a built-in loader cache cache: !isWebpack5, - babelPresetPlugins, hasModern: !!config.experimental.modern, development: dev, hasReactRefresh, @@ -266,9 +256,8 @@ export default async function getBaseWebpackConfig( /next[\\/]dist[\\/]client/, /next[\\/]dist[\\/]pages/, /[\\/](strip-ansi|ansi-regex)[\\/]/, - ...(config.experimental.plugins - ? VALID_MIDDLEWARE.map((name) => new RegExp(`src(\\\\|/)${name}`)) - : []), + // Compile plugins through babel + ...VALID_MIDDLEWARE.map((name) => new RegExp(`src(\\\\|/)${name}`)), ] // Support for NODE_PATH @@ -969,9 +958,7 @@ export default async function getBaseWebpackConfig( 'process.env.__NEXT_BUILD_INDICATOR': JSON.stringify( config.devIndicators.buildActivity ), - 'process.env.__NEXT_PLUGINS': JSON.stringify( - config.experimental.plugins - ), + 'process.env.__NEXT_PLUGINS': JSON.stringify(true), 'process.env.__NEXT_STRICT_MODE': JSON.stringify( config.reactStrictMode ), @@ -1193,7 +1180,6 @@ export default async function getBaseWebpackConfig( trailingSlash: config.trailingSlash, modern: config.experimental.modern, buildActivity: config.devIndicators.buildActivity, - plugins: config.experimental.plugins, reactStrictMode: config.reactStrictMode, reactMode: config.experimental.reactMode, optimizeFonts: config.experimental.optimizeFonts, diff --git a/packages/next/build/webpack/loaders/next-babel-loader.js b/packages/next/build/webpack/loaders/next-babel-loader.js index 56212e6db210b..a5d1cf09935d8 100644 --- a/packages/next/build/webpack/loaders/next-babel-loader.js +++ b/packages/next/build/webpack/loaders/next-babel-loader.js @@ -58,7 +58,6 @@ module.exports = babelLoader.custom((babel) => { isModern: opts.isModern, pagesDir: opts.pagesDir, hasModern: opts.hasModern, - babelPresetPlugins: opts.babelPresetPlugins, development: opts.development, hasReactRefresh: opts.hasReactRefresh, hasJsxRuntime: opts.hasJsxRuntime, @@ -98,7 +97,6 @@ module.exports = babelLoader.custom((babel) => { delete loader.isModern delete loader.hasModern delete loader.pagesDir - delete loader.babelPresetPlugins delete loader.development delete loader.hasReactRefresh delete loader.hasJsxRuntime @@ -113,7 +111,6 @@ module.exports = babelLoader.custom((babel) => { isModern, hasModern, pagesDir, - babelPresetPlugins, development, hasReactRefresh, hasJsxRuntime, @@ -255,13 +252,6 @@ module.exports = babelLoader.custom((babel) => { }, ] - for (const plugin of babelPresetPlugins) { - require(join(plugin.dir, 'src', 'babel-preset-build.js'))( - options, - plugin.config || {} - ) - } - return options }, } diff --git a/packages/next/next-server/server/config.ts b/packages/next/next-server/server/config.ts index 9700fe1c4d3e7..a34498b74675e 100644 --- a/packages/next/next-server/server/config.ts +++ b/packages/next/next-server/server/config.ts @@ -52,7 +52,6 @@ const defaultConfig: { [key: string]: any } = { (os.cpus() || { length: 1 }).length) - 1 ), modern: false, - plugins: false, profiling: false, sprFlushToDisk: true, reactMode: 'legacy', diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts index 8b6b4c3c4b79a..07f7ddc0704bd 100644 --- a/packages/next/next-server/server/next-server.ts +++ b/packages/next/next-server/server/next-server.ts @@ -233,7 +233,7 @@ export default class Server { // call init-server middleware, this is also handled // individually in serverless bundles when deployed - if (!dev && this.nextConfig.experimental.plugins) { + if (!dev) { const initServer = require(join(this.serverBuildDir, 'init-server.js')) .default this.onErrorMiddleware = require(join( diff --git a/test/integration/next-plugins/app/node_modules/@next/plugin-google-analytics/src/babel-preset-build.js b/test/integration/next-plugins/app/node_modules/@next/plugin-google-analytics/src/babel-preset-build.js deleted file mode 100644 index d63f2c18e8949..0000000000000 --- a/test/integration/next-plugins/app/node_modules/@next/plugin-google-analytics/src/babel-preset-build.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = function babelPresetBuild(ctx, config) { - // options.plugins - // options.presets -} From df27e98db0362b208fcc0b59993f71b2cc2ab9d8 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 4 Nov 2020 14:01:27 +0100 Subject: [PATCH 2/3] Update tests --- test/integration/next-plugins/test/index.test.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/test/integration/next-plugins/test/index.test.js b/test/integration/next-plugins/test/index.test.js index 51189da43f6b1..658bc69248cbd 100644 --- a/test/integration/next-plugins/test/index.test.js +++ b/test/integration/next-plugins/test/index.test.js @@ -56,7 +56,7 @@ describe('Next.js plugins', () => { beforeAll(async () => { await fs.writeFile( nextConfigPath, - `module.exports = { env: { GA_TRACKING_ID: 'my-tracking-id' }, experimental: { plugins: true } }` + `module.exports = { env: { GA_TRACKING_ID: 'my-tracking-id' } }` ) appPort = await findPort() app = await launchApp(appDir, appPort, { @@ -79,9 +79,6 @@ describe('Next.js plugins', () => { nextConfigPath, ` module.exports = { - experimental: { - plugins: true - }, plugins: [ { name: '@next/plugin-google-analytics', @@ -122,7 +119,7 @@ describe('Next.js plugins', () => { beforeAll(async () => { await fs.writeFile( nextConfigPath, - `module.exports = { env: { GA_TRACKING_ID: 'my-tracking-id' }, experimental: { plugins: true } }` + `module.exports = { env: { GA_TRACKING_ID: 'my-tracking-id' } }` ) const results = await nextBuild(appDir, undefined, { stdout: true, @@ -145,7 +142,7 @@ describe('Next.js plugins', () => { beforeAll(async () => { await fs.writeFile( nextConfigPath, - `module.exports = { target: 'serverless', env: { GA_TRACKING_ID: 'my-tracking-id' }, experimental: { plugins: true } }` + `module.exports = { target: 'serverless', env: { GA_TRACKING_ID: 'my-tracking-id' } }` ) const results = await nextBuild(appDir, undefined, { stdout: true, From 5ff9eb841253e4058164b058d5d5554fce98f754 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 1 Dec 2020 11:15:27 -0600 Subject: [PATCH 3/3] Update size-limit test --- test/integration/size-limit/test/index.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/size-limit/test/index.test.js b/test/integration/size-limit/test/index.test.js index ab83da0a8d9b7..016281a46d65f 100644 --- a/test/integration/size-limit/test/index.test.js +++ b/test/integration/size-limit/test/index.test.js @@ -81,6 +81,6 @@ describe('Production response size', () => { const delta = responseSizesBytes / 1024 // Expected difference: < 0.5 - expect(delta).toBeCloseTo(281.4, 0) + expect(delta).toBeCloseTo(282.4, 0) }) })