Symfony
sponsored by SensioLabs
Menu
  • About
  • Documentation
  • Screencasts
  • Cloud
  • Certification
  • Community
  • Businesses
  • News
  • Download
  1. Home
  2. Documentation
  3. Frontend
  4. Advanced Webpack Config
  • Documentation
  • Book
  • Reference
  • Bundles
  • Cloud
Search by Algolia
  • Defining Multiple Webpack Configurations

Advanced Webpack Config

Edit this page

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

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

Advanced Webpack Config

Quite simply, Encore generates the Webpack configuration that's used in your webpack.config.js file. Encore doesn't support adding all of Webpack's configuration options, because many can be easily added on your own.

For example, suppose you need to set Webpack's watchOptions setting. To do that, modify the config after fetching it from Encore:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// webpack.config.js

var Encore = require('@symfony/webpack-encore');

// ... all Encore config here

// fetch the config, then modify it!
var config = Encore.getWebpackConfig();
config.watchOptions = { poll: true, ignored: /node_modules/ };

// other examples: add an alias or extension
// config.resolve.alias.local = path.resolve(__dirname, './resources/src');
// config.resolve.extensions.push('json');

// export the final config
module.exports = config;

But be careful not to accidentally override any config from Encore:

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

// GOOD - this modifies the config.resolve.extensions array
config.resolve.extensions.push('json');

// BAD - this replaces any extensions added by Encore
// config.resolve.extensions = ['json'];

Defining Multiple Webpack Configurations

Webpack supports passing an array of configurations, which are processed in parallel. Webpack Encore includes a reset() object allowing to reset the state of the current configuration to build a new one:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// define the first configuration
Encore
    .setOutputPath('web/build/')
    .setPublicPath('/build')
    .addEntry('app', './assets/js/main.js')
    .addStyleEntry('global', './assets/css/global.scss')
    .enableSassLoader()
    .autoProvidejQuery()
    .enableSourceMaps(!Encore.isProduction())
;

// build the first configuration
const firstConfig = Encore.getWebpackConfig();

// Set a unique name for the config (needed later!)
firstConfig.name = 'firstConfig';

// reset Encore to build the second config
Encore.reset();

// define the second configuration
Encore
    .setOutputPath('web/build/')
    .setPublicPath('/build')
    .addEntry('mobile', './assets/js/mobile.js')
    .addStyleEntry('mobile', './assets/css/mobile.less')
    .enableLessLoader()
    .enableSourceMaps(!Encore.isProduction())
;

// build the second configuration
const secondConfig = Encore.getWebpackConfig();

// Set a unique name for the config (needed later!)
secondConfig.name = 'secondConfig';

// export the final configuration as an array of multiple configurations
module.exports = [firstConfig, secondConfig];

When running Encore, both configurations will be built in parallel. If you prefer to build configs separately, pass the --config-name option:

1
$ yarn run encore dev --config-name firstConfig
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.
We stand with Ukraine.
Version:
Show your Sylius expertise

Show your Sylius expertise

Code consumes server resources. Blackfire tells you how

Code consumes server resources. Blackfire tells you how

↓ Our footer now uses the colors of the Ukrainian flag because Symfony stands with the people of Ukraine.

Avatar of Dalibor Karlović, a Symfony contributor

Thanks Dalibor Karlović for being a Symfony contributor

4 commits • 114 lines changed

View all contributors that help us make Symfony

Become a Symfony contributor

Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

Learn how to contribute

Symfony™ is a trademark of Symfony SAS. All rights reserved.

  • What is Symfony?
    • Symfony at a Glance
    • Symfony Components
    • Case Studies
    • Symfony Releases
    • Security Policy
    • Logo & Screenshots
    • Trademark & Licenses
    • symfony1 Legacy
  • Learn Symfony
    • Symfony Docs
    • Symfony Book
    • Reference
    • Bundles
    • Best Practices
    • Training
    • eLearning Platform
    • Certification
  • Screencasts
    • Learn Symfony
    • Learn PHP
    • Learn JavaScript
    • Learn Drupal
    • Learn RESTful APIs
  • Community
    • SymfonyConnect
    • Support
    • How to be Involved
    • Code of Conduct
    • Events & Meetups
    • Projects using Symfony
    • Downloads Stats
    • Contributors
    • Backers
  • Blog
    • Events & Meetups
    • A week of symfony
    • Case studies
    • Cloud
    • Community
    • Conferences
    • Diversity
    • Documentation
    • Living on the edge
    • Releases
    • Security Advisories
    • SymfonyInsight
    • Twig
    • SensioLabs
  • Services
    • SensioLabs services
    • Train developers
    • Manage your project quality
    • Improve your project performance
    • Host Symfony projects
    Deployed on
Follow Symfony
Search by Algolia