2017 © Pedro Peláez
 

library twig-webpack-extension

Inject your webpack entry points into twig templates with easy.

image

fullpipe/twig-webpack-extension

Inject your webpack entry points into twig templates with easy.

  • Thursday, April 20, 2017
  • by fullpipe
  • Repository
  • 1 Watchers
  • 30 Stars
  • 19,871 Installations
  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 6 Forks
  • 2 Open issues
  • 6 Versions
  • 16 % Grown

The README.md

Twig Webpack extension

Latest Version on Packagist Software License Total Downloads Tests, (*1)

Inject your webpack entry points into twig templates with easy., (*2)

This repo provides a Twig extension that joins Webpack resultant files with Twig template engine in an easy way., (*3)

This approach allows the dynamic insertion of the css stylesheets and js scripts with Webpack generated hash., (*4)

Also works well with extract-text-webpack-plugin, (*5)

Install

composer require fullpipe/twig-webpack-extension

Set up Webpack

You need to install the webpack-manifest-plugin, (*6)

npm install webpack-manifest-plugin --save

or with Yarn, (*7)

yarn add webpack-manifest-plugin

Configure webpack.config.js, (*8)

// webpack.config.js

var ManifestPlugin = require('webpack-manifest-plugin');
const path = require("path");

module.exports = {
  ...
  entry: {
    vendor: ["jquery", "lodash"],
    main: './src/main.js'
  },
  output: {
    ...
    filename: "js/[name].js",
    path: path.resolve(__dirname, "../public/build"),
    publicPath: '/build/', // required
  },
  plugins: [
    new ManifestPlugin(),
    new ExtractTextPlugin({
      filename: "css/[name].css",
      publicPath: "/build/",
    }),
  ]
}

Register as a Twig extension

# app/config/services.yml

parameters:
    webpack.manifest: "%kernel.root_dir%/../public/build/manifest.json" #should be absolute
    webpack.public_dir: "%kernel.root_dir%/../public" #your public-dir

services:
    twig_extension.webpack:
        class: Fullpipe\TwigWebpackExtension\WebpackExtension
        public: false
        arguments:
            - "%webpack.manifest%"
            - "%webpack.public_dir%"
        tags:
            - { name: twig.extension }

Inject entry points to your Twig

{# app/Resources/views/base.html.twig #}

<head>
    ...
    {% webpack_entry_css 'main' %}
    {% webpack_entry_css 'inline' inline %}
</head>

<body>
    ...
    {% webpack_entry_js 'vendor' %}
    {% webpack_entry_js 'main' defer %}
    {% webpack_entry_js 'second' async %}
    {% webpack_entry_js 'inline' inline %}
</body>

Example

See working example with webpack.config.js., (*9)

Hashing output files avoiding the browser cache

If you use [hash] or [chunkhash]:, (*10)

// webpack.config.js
...
output: {
  ...
  filename: '[name].[chunkhash].js',
  chunkFilename: '[name].[chunkhash].js'
},
plugins: [
  new ExtractTextPlugin({
    ...
    filename: 'css/[name].[contenthash].css',
  }),
]

You should clear twig cache after each webpack compilation.
So for dev environment do not use [hash] or [chunkhash]., (*11)

The Versions

20/04 2017

dev-master

9999999-dev

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack

20/04 2017

v2.0.1

2.0.1.0

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack

20/04 2017

dev-fix-depricated-source-method-use

dev-fix-depricated-source-method-use

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack

30/12 2016

v2.0.0

2.0.0.0

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack

29/06 2016

v1.0.1

1.0.1.0

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack

18/06 2016

v1.0

1.0.0.0

Inject your webpack entry points into twig templates with easy.

  Sources   Download

MIT

The Requires

 

twig extension webpack