Hey packagers!
Exactly one month after the last release, this new major release is now ready to be used! 🎉
This new version contains many changes, in a nutshell:
- removal of support for Node.js 19 and 21
- deletion of deprecated features, such as support for Vue 2 and ESLint.
- removal of support for
webpack-cli@4
andwebpack-dev-server@4
, - update to
sass-loader@16
,css-loader@7
andcss-minimizer-webpack-plugin@7
- makes Webpack dev-server optional
- and much more... see the full changelog below!
With all these modifications, we were able to lighten @symfony/webpack-encore
by removing ~220 dependencies comparing to the version 4.7.0, thus reducing installation times and disk writing, but also reducing the possibility of installing a dependency containing a vulnerability:
Package info for "@symfony/webpack-encore@4.7.0": 61 MB
Released: 2024-08-29 16:26:01.762 +0000 UTC (4w3d ago)
Downloads last week: 27,421 (16.14%)
Estimated traffic last week: 1.7 TB
Subdependencies: 628
Package info for "@symfony/webpack-encore@5.0.0": 53 MB
Released: 2024-09-29 20:08:45.238 +0000 UTC (1m20s ago)
Downloads last week: N/A (N/A%)
Estimated traffic last week: N/A
Subdependencies: 408
Estimated new statistics:
Package size: 61 MB → 53 MB (86.01%)
Subdependencies: 628 → 408 (-220)
Traffic with last week's downloads:
For current version: 1.7 TB → 1.4 TB (235 GB saved)
For all versions: 10 TB → 9.0 TB (1.5 TB saved)
Features
-
#1344 Add options configuration callback to
Encore.enableReactPreset()
(@Kocal) -
#1345 Add support for integrity hashes when asset names contain a query string (@Kocal)
BC Breaks
-
#1307 Drop
webpack-cli
4 support, onlywebpack-cli
^5.1.4 is supported (@Kocal) -
#1318 Drop webpack-dev-server 4 support, only webpack-dev-server 5 is supported (@Kocal)
The dev-server options have changed between versions 4 and 5, see the official migration guide to v5.
For example:
// With webpack-dev-server 4:
Encore.configureDevServerOptions((options) => {
options.https = {
ca: "./path/to/server.pem",
pfx: "./path/to/server.pfx",
key: "./path/to/server.key",
cert: "./path/to/server.crt",
passphrase: "webpack-dev-server",
requestCert: true,
};
});
// With webpack-dev-server 5 (now):
Encore.configureDevServerOptions((options) => {
options.server = {
type: 'https',
options: {
ca: "./path/to/server.pem",
pfx: "./path/to/server.pfx",
key: "./path/to/server.key",
cert: "./path/to/server.crt",
passphrase: "webpack-dev-server",
requestCert: true,
}
};
});
The webpack-dev-server
package is now an optional peer dependency.
It has been removed because some projects may not use it, and it was installing a bunch of unnecessary dependencies.
Removing the webpack-dev-server
dependency from Encore reduces the number of dependencies from 626 to 295 (-331!),
it helps to reduce the size of the node_modules
directory and the number of possible vulnerabilities.
To use the webpack-dev-server
again, you need to install it manually:
npm install webpack-dev-server --save-dev
# or
yarn add webpack-dev-server --dev
# or
pnpm install webpack-dev-server --save-dev
-
#1308 Drop Vue 2 support (End-Of-Life), only Vue 3 is supported (@Kocal)
-
#1313 Drop
clean-webpack-plugin
in favor of webpack'soutput.clean
configuration. The
configuration settings supported byEncore.cleanupOutputBeforeBuild
have changed (@stof) -
#1324 Drop
css-minimizer-webpack-plugin
5 support, onlycss-minimizer-webpack-plugin
7 is supported (@Kocal) -
#1342 Replace
assets-webpack-plugin
dependency by an internal plugin, to generateentrypoints.json
file (@Kocal) -
#1317 Drop support of sass-loader ^13 and ^14, add support for sass-loader ^16 (@Kocal)
The sass-loader's options have changed, the modern
options are now used by default.
Though not recommended,
you must specify the option api: 'legacy'
if you want to keep the legacy
options.
For example:
// With the legacy API:
Encore.enableSassLoader((options) => {
options.api = 'legacy';
options.includePaths = [/*...*/];
});
// With the modern API (default):
Encore.enableSassLoader((options) => {
options.loadPaths = [/*...*/];
});
Since css-loader
7.0.0,
styles imports became named by default.
It means you should update your code from:
import style from "./style.css";
console.log(style.myClass);
to:
import * as style from "./style.css";
console.log(style.myClass);
There is also a possibility to keep the previous behavior by configuring the css-loader
's modules
option:
config.configureCssLoader(options => {
if (options.modules) {
options.modules.namedExport = false;
options.modules.exportLocalsConvention = 'as-is';
}
});
Important
If you use CSS Modules inside .vue
files,
until vuejs/vue-loader#1909 is merged and released, you will need to restore the previous
behavior by configuring Encore with the code above.
Internal
-
#1327 Fix compat with configuring the devserver server as a string (@stof)
-
#1328 Remove non-existent option in our package-up utility (@stof)
-
#1329 Read the controllers.json as string rather than Buffer (@stof)
-
#1330 Add some types in the internal implementation of Encore (@stof)
-
#1343 Add tests for CSS Modules with React and Preact (@Kocal)
Upgrading
Run:
npm install "@symfony/webpack-encore@^5.0.0" --save-dev
or:
yarn upgrade "@symfony/webpack-encore@^5.0.0"
Changes: v4.7.0..v5.0.0
Happy Packing!