To v4 from v3

    If you are still using Node.js v4 or lower, you need to upgrade your Node.js installation to Node.js v6 or higher.

    CLI

    The CLI has moved to a separate package: webpack-cli. You need to install it before using webpack, see .

    Update plugins

    Many 3rd-party plugins need to be upgraded to their latest version to be compatible.

    Add the new option to your config. Set it to production or development in your configuration depending on config type.

    webpack.config.js

    Alternatively you can pass it via CLI: --mode production/--mode development

    Deprecated/Removed plugins

    These plugins can be removed from configuration as they are default in production mode:

    1. module.exports = {
    2. // ...
    3. - new NoEmitOnErrorsPlugin(),
    4. - new ModuleConcatenationPlugin(),
    5. - new DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") })
    6. - new UglifyJsPlugin()
    7. ],
    8. }

    These plugins are default in development mode

    webpack.config.js

    These plugins were deprecated and are now removed:

    webpack.config.js

    1. module.exports = {
    2. // ...
    3. plugins: [
    4. - new NewWatchingPlugin()
    5. ],

    CommonsChunkPlugin

    The CommonsChunkPlugin was removed. Instead the optimization.splitChunks options can be used.

    See documentation of the for more details. The default configuration may already suit your needs.

    non-esm.js

    example.js

    1. function sayHello() {
    2. import('./non-esm.js').then(module => {
    3. module.default.sayHello();
    4. });

    json and loaders

    When using a custom loader to transform .json files you now need to change the module type:

    webpack.config.js

    When still using the json-loader, it can be removed:

    webpack.config.js

    1. module.exports = {
    2. // ...
    3. rules: [
    4. {
    5. - test: /\.json$/,
    6. - loader: 'json-loader'
    7. }
    8. };

    module.loaders

    module.loaders were deprecated since webpack 2 and are now removed in favor of module.rules.