Update: upgrade to Webpack 4 & improve output size

Upgrade from Webpack v2.0.12 to v4.1.1. There have been many changes to
Webpack... Noticeable in the bundle size is that a number of files are
now inlined and generally minification is improved.

Changes related to the upgrade include:

- Remove unsupported UglifyJS options which link back to T188081. These
  appear to have been anticipatory but never acted on and it isn't clear
  whether they even worked or not.
- Pass the -p plag for production optimizations; pass the -d flag since
  production doesn't support watching.
- NamedModulesPlugin is now on by default but only in development mode
  so no change was made.
- Webpack command line client now must be installed separated and
  appears in package.json as webpack-cli.

https://github.com/webpack/webpack/releases/tag/v2.2.0
https://github.com/webpack/webpack/releases/tag/v2.2.1
https://github.com/webpack/webpack/releases/tag/v2.3.0
https://github.com/webpack/webpack/releases/tag/v2.3.1
https://github.com/webpack/webpack/releases/tag/v2.3.2
https://github.com/webpack/webpack/releases/tag/v2.3.3
https://github.com/webpack/webpack/releases/tag/v2.4.0
https://github.com/webpack/webpack/releases/tag/v2.4.1
https://github.com/webpack/webpack/releases/tag/v2.5.0
https://github.com/webpack/webpack/releases/tag/v2.5.1
https://github.com/webpack/webpack/releases/tag/v2.6.0
https://github.com/webpack/webpack/releases/tag/v2.6.1
https://github.com/webpack/webpack/releases/tag/v3.0.0
https://github.com/webpack/webpack/releases/tag/v3.1.0
https://github.com/webpack/webpack/releases/tag/v3.2.0
https://github.com/webpack/webpack/releases/tag/v3.3.0
https://github.com/webpack/webpack/releases/tag/v3.4.0
https://github.com/webpack/webpack/releases/tag/v3.4.1
https://github.com/webpack/webpack/releases/tag/v3.5.0
https://github.com/webpack/webpack/releases/tag/v3.5.1
https://github.com/webpack/webpack/releases/tag/v3.5.2
https://github.com/webpack/webpack/releases/tag/v3.5.3
https://github.com/webpack/webpack/releases/tag/v3.5.4
https://github.com/webpack/webpack/releases/tag/v3.5.5
https://github.com/webpack/webpack/releases/tag/v3.5.6
https://github.com/webpack/webpack/releases/tag/v3.6.0
https://github.com/webpack/webpack/releases/tag/v3.7.0
https://github.com/webpack/webpack/releases/tag/v3.7.1
https://github.com/webpack/webpack/releases/tag/v3.8.0
https://github.com/webpack/webpack/releases/tag/v3.8.1
https://github.com/webpack/webpack/releases/tag/v3.9.0
https://github.com/webpack/webpack/releases/tag/v3.9.1
https://github.com/webpack/webpack/releases/tag/v3.10.0
https://github.com/webpack/webpack/releases/tag/v3.11.0
https://github.com/webpack/webpack/releases/tag/v4.0.0
https://medium.com/webpack/webpack-4-released-today-6cdb994702d4
https://github.com/webpack/webpack/releases/tag/v4.0.1
https://github.com/webpack/webpack/releases/tag/v4.1.0
https://github.com/webpack/webpack/releases/tag/v4.1.1

Bug: T165036
Change-Id: Ic146e680d368fee7ee207b484460ce94f8bd7283
This commit is contained in:
Stephen Niedzielski 2018-03-16 14:19:29 -05:00
parent c2bb43b552
commit d35286a064
5 changed files with 2941 additions and 218 deletions

3121
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
{
"private": true,
"scripts": {
"start": "webpack -w",
"build": "NODE_ENV=production webpack",
"start": "webpack -dw",
"build": "NODE_ENV=production webpack -p",
"test:node": "node tests/node-qunit/run.js 'tests/node-qunit/**/*.test.js' | tap-dot",
"test:dev": "grunt lint && npm run test:node",
"test": " npm run check-built-assets && npm run test:dev && npm run doc",
@ -34,12 +34,13 @@
"stylelint-config-wikimedia": "0.4.2",
"svg-inline-loader": "0.8.0",
"tap-dot": "^1.0.5",
"webpack": "^2.6.0"
"webpack": "4.1.1",
"webpack-cli": "2.0.12"
},
"bundlesize": [
{
"path": "resources/dist/index.js",
"maxSize": "12KB"
"maxSize": "10.9KB"
}
]
}

Binary file not shown.

Binary file not shown.

View file

@ -29,13 +29,11 @@ conf = {
// with .json extension
sourceMapFilename: '[file].json'
},
entry: {
index: './src/index.js'
},
entry: { index: './src' },
performance: {
hints: isProduction ? 'error' : false,
maxAssetSize: 38.9 * 1024,
maxEntrypointSize: 38.9 * 1024,
maxAssetSize: 32.9 * 1024,
maxEntrypointSize: 32.9 * 1024,
assetFilter: function ( filename ) {
// The default filter excludes map files but we rename ours to .filename.
return filename.endsWith( '.js' );
@ -68,9 +66,8 @@ conf = {
};
// Production settings.
// Enable minification and dead code elimination with uglify. Define the
// global process.env.NODE_ENV so that libraries like redux and redux-thunk get
// development code trimmed.
// Define the global process.env.NODE_ENV so that libraries like redux and
// redux-thunk get development code trimmed.
// Enable minimize flags for webpack loaders and disable debug.
if ( isProduction ) {
conf.plugins = conf.plugins.concat( [
@ -82,22 +79,6 @@ if ( isProduction ) {
'process.env': {
NODE_ENV: JSON.stringify( 'production' )
}
} ),
new webpack.optimize.UglifyJsPlugin( {
sourceMap: true,
// Preserve @nomin comments that disable ResourceLoader minification if
// present. Right now a banner with @nomin is not being added since in
// production mode the source-map comment will end up in a compound
// bundle (as load.php will bundle a many modules in a single request)
// thus breaking source-maps for other sources than the Popups ones. We
// should add the @nomin banner in the future if ResourceLoader supports
// combining/merging source-maps from different modules. For the moment,
// the source map comment will be stripped in ResourceLoader's production
// mode to not interfere with debugging other sources loaded alongside
// Popups.
//
// See https://phabricator.wikimedia.org/T188081 for more info
comments: /@nomin/
} )
] );
}