Upgrade guide from 3.x to 4.x
Dependencies
Update/add razzle core dependencies
yarn add --dev \ razzle \ razzle-dev-utils \ babel-preset-razzle... and Razzle peerDependencies
Update/add razzle peerdependencies
yarn add --dev \ webpack-dev-server@3.11.0 \ mini-css-extract-plugin@0.9.0 \ postcss@8.2.4Choose your webpack version
yarn add --dev webpack@5.24.0 html-webpack-plugin@5.2.0# oryarn add --dev webpack@4.46.0 html-webpack-plugin@4.5.2Update/add razzle plugins if you use any
yarn add --dev razzle-plugin-scssSpa apps
Remove --type=spa from scripts
{ "scripts": { "start": "razzle start --type=spa", "build": "razzle build --type=spa" }}Add Options
//./razzle.config.jsmodule.exports = { options: { buildType: 'spa' },};Update the template
Plugins
Plugins are now multiple functions as opposed to one before.
E.g. change:
'use strict';module.exports = function myRazzlePlugin(config, { target, dev }, webpack, options) { // Do some stuff to config return config;};To:
'use strict';module.exports = { modifyWebpackConfig({ env: { target, // the target 'node' or 'web' dev, // is this a development build? true or false }, webpackConfig, // the created webpack config webpackObject, // the imported webpack node module options: { pluginOptions, // the options passed to the plugin ({ name:'pluginname', options: { key: 'value'}}) razzleOptions, // the modified options passed to Razzle in the `options` key in `razzle.config.js` (options: { key: 'value'}) webpackOptions, // the modified options that was used to configure webpack/ webpack loaders and plugins }, paths, // the modified paths that will be used by Razzle. }) { // Do some stuff to webpackConfig return webpackConfig; }};You can also make use of modifyOptions, modifyPaths, modifyWebpackOptions and modifyJestConfig.
To make plugins simpler and more composable.
Extending Webpack
Modify is now multiple functions as opposed to one before.
E.g. change:
'use strict';// razzle.config.jsmodule.exports = { modify: (config, { target, dev }, webpack) => { // do something to config return config; },};To:
'use strict';module.exports = { modifyWebpackConfig({ env: { target, // the target 'node' or 'web' dev, // is this a development build? true or false }, webpackConfig, // the created webpack config webpackObject, // the imported webpack node module options: { razzleOptions, // the modified options passed to Razzle in the `options` key in `razzle.config.js` (options: { key: 'value'}) webpackOptions, // the modified options that was used to configure webpack/ webpack loaders and plugins }, paths, // the modified paths that will be used by Razzle. }) { // Do some stuff to webpackConfig return webpackConfig; }};You can also make use of modifyOptions, modifyPaths, modifyWebpackOptions and modifyJestConfig.
To make extending webpack simpler.