Skip to content

Configuring Babel

Warning: You are browsing the documentation for Symfony 5.x, which is no longer maintained.

Read the updated version of this page for Symfony 7.2 (the current stable version).

Babel is automatically configured for all .js and .jsx files via the babel-loader with sensible defaults (e.g. with the @babel/preset-env and @babel/preset-react if requested).

Need to extend the Babel configuration further? The easiest way is via configureBabel():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// webpack.config.js
// ...

Encore
    // ...

    .configureBabel(function(babelConfig) {
        // add additional presets
        babelConfig.presets.push('@babel/preset-flow');

        // no plugins are added by default, but you can add some
        babelConfig.plugins.push('styled-jsx/babel');
    }, {
        // node_modules is not processed through Babel by default
        // but you can allow some specific modules to be processed
        includeNodeModules: ['foundation-sites'],

        // or completely control the exclude rule (note that you
        // can't use both "includeNodeModules" and "exclude" at
        // the same time)
        exclude: /bower_components/
    })
;

Configuring Browser Targets

The @babel/preset-env preset rewrites your JavaScript so that the final syntax will work in whatever browsers you want. To configure the browsers that you need to support, see PostCSS and autoprefixing (postcss-loader).

After changing your "browserslist" config, you will need to manually remove the babel cache directory:

1
2
# On Unix run this command. On Windows, clear this directory manually
$ rm -rf node_modules/.cache/babel-loader/

If you want to customize the preset-env configuration, use the configureBabelPresetEnv() method to add any of the @babel/preset-env configuration options:

1
2
3
4
5
6
7
8
9
10
11
// webpack.config.js
// ...

Encore
    // ...

    .configureBabelPresetEnv((config) => {
        config.useBuiltIns = 'usage';
        config.corejs = 3;
    })
;

Creating a .babelrc File

Instead of calling configureBabel(), you could create a .babelrc file at the root of your project. This is a more "standard" way of configuring Babel, but it has a downside: as soon as a .babelrc file is present, Encore can no longer add any Babel configuration for you. For example, if you call Encore.enableReactPreset(), the react preset will not automatically be added to Babel: you must add it yourself in .babelrc.

As soon as a .babelrc file is present, it will take priority over the Babel configuration added by Encore.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.
TOC
    Version