2017 © Pedro Peláez
 

symfony-bundle webpack-encore-bundle

Integration with your Symfony app & Webpack Encore!

image

knpuniversity/webpack-encore-bundle

Integration with your Symfony app & Webpack Encore!

  • Wednesday, July 18, 2018
  • by weaverryan
  • Repository
  • 6 Watchers
  • 8 Stars
  • 4 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

WebpackEncoreBundle: Symfony integration with Webpack Encore!

WARNING This bundle IS NOT MAINTAINED anymore, use symfony/webpack-encore-bundle instead!!!, (*1)

This bundle allows you to use the splitEntryChunks() feature from Webpack Encore by reading an entrypoins.json file and helping you render all of the dynamic script and link tags needed., (*2)

Install the bundle with:, (*3)

composer require knpuniversity/webpack-encore-bundle

Configuration

If you're using Symfony Flex, you're done! The recipe will pre-configure everything you need in the config/packages/webpack_encore.yaml file:, (*4)

# config/packages/webpack_encore.yaml
webpack_encore:
    # The path where Encore is building the assets - i.e. Encore.setOutputPath()
    output_path: '%kernel.public_dir%/build'

    # The public prefix to your assets that you normally use with the asset() function (e.g. build/) -
    # should match the "setManifestKeyPrefix()" value in webpack.config.js, if set.
    asset_path_prefix: 'build/'

Usage

First, enable the "Split Chunks" functionality in Webpack Encore:, (*5)

// webpack.config.js
// ...
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .setManifestKeyPrefix('build/')

    .addEntry('entry1', './assets/some_file.js')

+   .splitEntryChunks()
// ...

When you enable splitEntryChunks(), instead of just needing 1 script tag for entry1.js and 1 link tag for entry1.css, you may now need multiple script and link tags. This is because Webpack "splits" your files into smaller pieces for greater optimization., (*6)

To help with this, Encore writes a entrypoints.json file that contains all of the files needed for each "entry"., (*7)

For example, to render all of the script and link tags for a specific "entry" (e.g. entry1), you can:, (*8)

{# any template or base layout where you need to include a JavaScript entry #}

{% block javascripts %}
    {{ parent() }}

    {{ encore_entry_script_tags('entry1') }}
{% endblock %}

{% block stylesheets %}
    {{ parent() }}

    {{ encore_entry_link_tags('entry1') }}
{% endblock %}

Assuming that entry1 required two files to be included - vendor~entry1~entry2.js and entry1.js, then encore_entry_script_tags() is equivalent to:, (*9)

<script src="{{ asset('build/vendor~entry1~entry2.js') }}"></script>
<script src="{{ asset('build/entry1.js') }}"></script>

The build/ public prefix to your assets is set in the config file., (*10)

If you want more control, you can use the encore_entry_js_files() and encore_entry_css_files() methods to get the list of files needed, then loop and create the script and link tags manually., (*11)

The Versions