diff --git a/packages/next/build/babel/preset.ts b/packages/next/build/babel/preset.ts index 6980c11c4b8ddfc..a244e4e00ae6bf7 100644 --- a/packages/next/build/babel/preset.ts +++ b/packages/next/build/babel/preset.ts @@ -64,9 +64,7 @@ module.exports = ( const supportsESM = api.caller(supportsStaticESM) const isServer = api.caller((caller: any) => !!caller && caller.isServer) const isModern = api.caller((caller: any) => !!caller && caller.isModern) - const isPolyfillsOptimization = api.caller( - (caller: any) => !!caller && caller.polyfillsOptimization - ) + const isLaxModern = isModern || (options['preset-env']?.targets && @@ -155,7 +153,7 @@ module.exports = ( !isServer && [ require('@babel/plugin-transform-runtime'), { - corejs: isPolyfillsOptimization ? false : 2, + corejs: false, helpers: true, regenerator: true, useESModules: supportsESM && presetEnvConfig.modules !== 'commonjs', diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 5799e871ab3c068..c65cdb2caf03175 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -54,10 +54,7 @@ const escapePathVariables = (value: any) => { : value } -function getOptimizedAliases( - isServer: boolean, - polyfillsOptimization: boolean -): { [pkg: string]: string } { +function getOptimizedAliases(isServer: boolean): { [pkg: string]: string } { if (isServer) { return {} } @@ -68,12 +65,6 @@ function getOptimizedAliases( const shimAssign = path.join(__dirname, 'polyfills', 'object.assign') return Object.assign( {}, - // Polyfill: Window#fetch - polyfillsOptimization - ? undefined - : { - __next_polyfill__fetch: require.resolve('whatwg-fetch'), - }, { unfetch$: stubWindowFetch, 'isomorphic-unfetch$': stubWindowFetch, @@ -84,13 +75,6 @@ function getOptimizedAliases( 'whatwg-fetch.js' ), }, - polyfillsOptimization - ? undefined - : { - // Polyfill: Object.assign - __next_polyfill__object_assign: require.resolve('object-assign'), - '@babel/runtime-corejs2/core-js/object/assign': stubObjectAssign, - }, { 'object-assign$': stubObjectAssign, @@ -168,7 +152,6 @@ export default async function getBaseWebpackConfig( babelPresetPlugins, hasModern: !!config.experimental.modern, development: dev, - polyfillsOptimization: !!config.experimental.polyfillsOptimization, }, }, // Backwards compat @@ -215,9 +198,7 @@ export default async function getBaseWebpackConfig( ), [CLIENT_STATIC_FILES_RUNTIME_POLYFILLS]: path.join( NEXT_PROJECT_ROOT_DIST_CLIENT, - config.experimental.polyfillsOptimization - ? 'polyfills-nomodule.js' - : 'polyfills.js' + 'polyfills.js' ), } as ClientEntries) : undefined @@ -267,17 +248,7 @@ export default async function getBaseWebpackConfig( next: NEXT_PROJECT_ROOT, [PAGES_DIR_ALIAS]: pagesDir, [DOT_NEXT_ALIAS]: distDir, - ...getOptimizedAliases( - isServer, - !!config.experimental.polyfillsOptimization - ), - - // Temporary to allow runtime-corejs2 to be stubbed in experimental polyfillsOptimization - ...(config.experimental.polyfillsOptimization - ? { - '@babel/runtime-corejs2': '@babel/runtime', - } - : undefined), + ...getOptimizedAliases(isServer), }, mainFields: isServer ? ['main', 'module'] : ['browser', 'module', 'main'], plugins: [PnpWebpackPlugin], @@ -528,11 +499,7 @@ export default async function getBaseWebpackConfig( !res.match(/next[/\\]dist[/\\]next-server[/\\]/) && (res.match(/[/\\]next[/\\]dist[/\\]/) || // This is the @babel/plugin-transform-runtime "helpers: true" option - res.match(/node_modules[/\\]@babel[/\\]runtime[/\\]/) || - (!config.experimental.polyfillsOptimization && - res.match( - /node_modules[/\\]@babel[/\\]runtime-corejs2[/\\]/ - ))) + res.match(/node_modules[/\\]@babel[/\\]runtime[/\\]/)) ) { return callback() } @@ -728,9 +695,6 @@ export default async function getBaseWebpackConfig( 'process.env.__NEXT_MODERN_BUILD': JSON.stringify( config.experimental.modern && !dev ), - 'process.env.__NEXT_POLYFILLS_OPTIMIZATION': JSON.stringify( - !!config.experimental.polyfillsOptimization - ), 'process.env.__NEXT_GRANULAR_CHUNKS': JSON.stringify( config.experimental.granularChunks && !dev ), diff --git a/packages/next/build/webpack/loaders/next-babel-loader.js b/packages/next/build/webpack/loaders/next-babel-loader.js index 8faf81c78fa7708..91e71f573730ccc 100644 --- a/packages/next/build/webpack/loaders/next-babel-loader.js +++ b/packages/next/build/webpack/loaders/next-babel-loader.js @@ -59,7 +59,6 @@ module.exports = babelLoader.custom(babel => { hasModern: opts.hasModern, babelPresetPlugins: opts.babelPresetPlugins, development: opts.development, - polyfillsOptimization: opts.polyfillsOptimization, } const filename = join(opts.cwd, 'noop.js') const loader = Object.assign( @@ -72,7 +71,7 @@ module.exports = babelLoader.custom(babel => { (opts.isServer ? '-server' : '') + (opts.isModern ? '-modern' : '') + (opts.hasModern ? '-has-modern' : '') + - (opts.polyfillsOptimization ? '-new-polyfills' : '') + + '-new-polyfills' + (opts.development ? '-development' : '-production') + JSON.stringify( babel.loadPartialConfig({ @@ -95,7 +94,6 @@ module.exports = babelLoader.custom(babel => { delete loader.hasModern delete loader.pagesDir delete loader.babelPresetPlugins - delete loader.polyfillsOptimization delete loader.development return { loader, custom } }, @@ -110,7 +108,6 @@ module.exports = babelLoader.custom(babel => { pagesDir, babelPresetPlugins, development, - polyfillsOptimization, }, } ) { @@ -134,7 +131,6 @@ module.exports = babelLoader.custom(babel => { options.caller.isServer = isServer options.caller.isModern = isModern - options.caller.polyfillsOptimization = polyfillsOptimization options.caller.isDev = development options.plugins = options.plugins || [] diff --git a/packages/next/client/index.js b/packages/next/client/index.js index c69fedcff8c8403..8cd2473aa15c6cc 100644 --- a/packages/next/client/index.js +++ b/packages/next/client/index.js @@ -14,20 +14,9 @@ import { isDynamicRoute } from '../next-server/lib/router/utils/is-dynamic' /// -if (process.env.__NEXT_POLYFILLS_OPTIMIZATION) { - if (!('finally' in Promise.prototype)) { - // eslint-disable-next-line no-extend-native - Promise.prototype.finally = require('finally-polyfill') - } -} else { - // Polyfill Promise globally - // This is needed because Webpack's dynamic loading(common chunks) code - // depends on Promise. - // So, we need to polyfill it. - // See: https://webpack.js.org/guides/code-splitting/#dynamic-imports - if (!self.Promise) { - self.Promise = require('@babel/runtime-corejs2/core-js/promise') - } +if (!('finally' in Promise.prototype)) { + // eslint-disable-next-line no-extend-native + Promise.prototype.finally = require('finally-polyfill') } const data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent) diff --git a/packages/next/client/polyfills-nomodule.js b/packages/next/client/polyfills-nomodule.js deleted file mode 100644 index 5682d2a0577ab9f..000000000000000 --- a/packages/next/client/polyfills-nomodule.js +++ /dev/null @@ -1 +0,0 @@ -import '@next/polyfill-nomodule' diff --git a/packages/next/client/polyfills.js b/packages/next/client/polyfills.js index 49e4345b6e60269..5682d2a0577ab9f 100644 --- a/packages/next/client/polyfills.js +++ b/packages/next/client/polyfills.js @@ -1,3 +1 @@ -import '__next_polyfill__fetch' -import 'url-polyfill' -Object.assign = require('__next_polyfill__object_assign') +import '@next/polyfill-nomodule' diff --git a/packages/next/package.json b/packages/next/package.json index f84528b5b61fbf4..d2e796d1a9723c1 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -72,7 +72,6 @@ "@babel/preset-react": "7.7.0", "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", - "@babel/runtime-corejs2": "7.7.2", "@babel/types": "7.7.4", "@next/polyfill-nomodule": "9.2.3-canary.0", "amphtml-validator": "1.0.23", @@ -117,7 +116,6 @@ "mini-css-extract-plugin": "0.8.0", "mkdirp": "0.5.1", "node-fetch": "2.6.0", - "object-assign": "4.1.1", "ora": "3.4.0", "path-to-regexp": "6.1.0", "pnp-webpack-plugin": "1.5.0", @@ -148,8 +146,7 @@ "webpack": "4.41.2", "webpack-dev-middleware": "3.7.0", "webpack-hot-middleware": "2.25.0", - "webpack-sources": "1.4.3", - "whatwg-fetch": "3.0.0" + "webpack-sources": "1.4.3" }, "peerDependencies": { "react": "^16.6.0", diff --git a/packages/next/taskfile-babel.js b/packages/next/taskfile-babel.js index d31ced3d8bde1e4..7c49c16968c9747 100644 --- a/packages/next/taskfile-babel.js +++ b/packages/next/taskfile-babel.js @@ -95,11 +95,6 @@ module.exports = function(task) { const output = transform(file.data, options) const ext = extname(file.base) - output.code = output.code.replace( - /@babel\/runtime\//g, - '@babel/runtime-corejs2/' - ) - // Replace `.ts|.tsx` with `.js` in files with an extension if (ext) { const extRegex = new RegExp(ext.replace('.', '\\.') + '$', 'i') diff --git a/test/integration/bundle-size-profiling/next.config.js b/test/integration/bundle-size-profiling/next.config.js index 4d15dcc1bb368ea..484d359b9230644 100644 --- a/test/integration/bundle-size-profiling/next.config.js +++ b/test/integration/bundle-size-profiling/next.config.js @@ -1,7 +1,4 @@ module.exports = { - experimental: { - polyfillsOptimization: true, - }, webpack(config, options) { if (!options.isServer) { config.profile = true diff --git a/test/integration/modern-mode/test/index.test.js b/test/integration/modern-mode/test/index.test.js index 52ae6c8324d4c9f..2d73aa8de1dd51c 100644 --- a/test/integration/modern-mode/test/index.test.js +++ b/test/integration/modern-mode/test/index.test.js @@ -40,14 +40,7 @@ describe('Modern Mode', () => { it('should generate client side modern and legacy build files', async () => { const buildId = readFileSync(join(appDir, '.next/BUILD_ID'), 'utf8') - const expectedFiles = [ - 'index', - '_app', - '_error', - 'main', - 'webpack', - 'commons', - ] + const expectedFiles = ['index', '_app', '_error', 'main', 'webpack'] const buildFiles = [ ...readdirSync(join(appDir, '.next/static', buildId, 'pages')), ...readdirSync(join(appDir, '.next/static/runtime')).map( diff --git a/test/integration/polyfilling-minimal/next.config.js b/test/integration/polyfilling-minimal/next.config.js index 92edca3df03281c..4ba52ba2c8df675 100644 --- a/test/integration/polyfilling-minimal/next.config.js +++ b/test/integration/polyfilling-minimal/next.config.js @@ -1,5 +1 @@ -module.exports = { - experimental: { - polyfillsOptimization: true, - }, -} +module.exports = {} diff --git a/test/integration/size-limit/test/index.test.js b/test/integration/size-limit/test/index.test.js index 5cec5c5e90726a6..7a2fc3f4ea53422 100644 --- a/test/integration/size-limit/test/index.test.js +++ b/test/integration/size-limit/test/index.test.js @@ -80,7 +80,7 @@ describe('Production response size', () => { ) // These numbers are without gzip compression! - const delta = responseSizesBytes - 233 * 1024 + const delta = responseSizesBytes - 241 * 1024 expect(delta).toBeLessThanOrEqual(1024) // don't increase size more than 1kb expect(delta).toBeGreaterThanOrEqual(-1024) // don't decrease size more than 1kb without updating target }) @@ -100,7 +100,7 @@ describe('Production response size', () => { ) // These numbers are without gzip compression! - const delta = responseSizesBytes - 201 * 1024 + const delta = responseSizesBytes - 171 * 1024 expect(delta).toBeLessThanOrEqual(1024) // don't increase size more than 1kb expect(delta).toBeGreaterThanOrEqual(-1024) // don't decrease size more than 1kb without updating target }) diff --git a/test/unit/next-babel.test.js b/test/unit/next-babel.test.js index ecd76a2d0c90330..5dddb43b3f48c54 100644 --- a/test/unit/next-babel.test.js +++ b/test/unit/next-babel.test.js @@ -69,7 +69,7 @@ describe('next/babel', () => { expect(output).toMatch(`__jsx("a",{href:"/"`) expect(babel(`const a = ()=>home`)).toMatchInlineSnapshot( - `"\\"use strict\\";var _interopRequireDefault=require(\\"@babel/runtime-corejs2/helpers/interopRequireDefault\\");var _react=_interopRequireDefault(require(\\"react\\"));var __jsx=_react[\\"default\\"].createElement;var a=function a(){return __jsx(\\"a\\",{href:\\"/\\"},\\"home\\");};"` + `"\\"use strict\\";var _interopRequireDefault=require(\\"@babel/runtime/helpers/interopRequireDefault\\");var _react=_interopRequireDefault(require(\\"react\\"));var __jsx=_react[\\"default\\"].createElement;var a=function a(){return __jsx(\\"a\\",{href:\\"/\\"},\\"home\\");};"` ) }) diff --git a/yarn.lock b/yarn.lock index 4685fc13441d7bf..56b5c8032f1648b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1036,14 +1036,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.7.4" -"@babel/runtime-corejs2@7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.2.tgz#5a8c4e2f8688ce58adc9eb1d8320b6e7341f96ce" - integrity sha512-GfVnHchOBvIMsweQ13l4jd9lT4brkevnavnVOej5g2y7PpTRY+R4pcQlCjWMZoUla5rMLFzaS/Ll2s59cB1TqQ== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" - "@babel/runtime@7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" @@ -1099,7 +1091,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.1", "@babel/types@^7.7.2", "@babel/types@^7.7.4": +"@babel/types@7.7.4", "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.1", "@babel/types@^7.7.2", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==