Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable polyfillsOptimization #10574

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 2 additions & 4 deletions packages/next/build/babel/preset.ts
Expand Up @@ -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 &&
Expand Down Expand Up @@ -155,7 +153,7 @@ module.exports = (
!isServer && [
require('@babel/plugin-transform-runtime'),
{
corejs: isPolyfillsOptimization ? false : 2,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this stops @babel/plugin-transform-runtime from polyfilling anything #9511 could be enabled again. All it would do then is reuse more helpers.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updating the version is moot now because the code doesn't even run.

corejs: false,
helpers: true,
regenerator: true,
useESModules: supportsESM && presetEnvConfig.modules !== 'commonjs',
Expand Down
44 changes: 4 additions & 40 deletions packages/next/build/webpack-config.ts
Expand Up @@ -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 {}
}
Expand All @@ -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,
Expand All @@ -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,

Expand Down Expand Up @@ -168,7 +152,6 @@ export default async function getBaseWebpackConfig(
babelPresetPlugins,
hasModern: !!config.experimental.modern,
development: dev,
polyfillsOptimization: !!config.experimental.polyfillsOptimization,
},
},
// Backwards compat
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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],
Expand Down Expand Up @@ -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()
}
Expand Down Expand Up @@ -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
),
Expand Down
6 changes: 1 addition & 5 deletions packages/next/build/webpack/loaders/next-babel-loader.js
Expand Up @@ -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(
Expand All @@ -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({
Expand All @@ -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 }
},
Expand All @@ -110,7 +108,6 @@ module.exports = babelLoader.custom(babel => {
pagesDir,
babelPresetPlugins,
development,
polyfillsOptimization,
},
}
) {
Expand All @@ -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 || []
Expand Down
17 changes: 3 additions & 14 deletions packages/next/client/index.js
Expand Up @@ -14,20 +14,9 @@ import { isDynamicRoute } from '../next-server/lib/router/utils/is-dynamic'

/// <reference types="react-dom/experimental" />

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)
Expand Down
1 change: 0 additions & 1 deletion packages/next/client/polyfills-nomodule.js

This file was deleted.

4 changes: 1 addition & 3 deletions 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'
5 changes: 1 addition & 4 deletions packages/next/package.json
Expand Up @@ -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.2",
"amphtml-validator": "1.0.23",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
5 changes: 0 additions & 5 deletions packages/next/taskfile-babel.js
Expand Up @@ -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')
Expand Down
3 changes: 0 additions & 3 deletions 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
Expand Down
6 changes: 1 addition & 5 deletions test/integration/polyfilling-minimal/next.config.js
@@ -1,5 +1 @@
module.exports = {
experimental: {
polyfillsOptimization: true,
},
}
module.exports = {}
10 changes: 1 addition & 9 deletions yarn.lock
Expand Up @@ -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"
Expand Down Expand Up @@ -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==
Expand Down