LoginSignup
0
2

More than 5 years have passed since last update.

Symfony + Webpack Encore 0.21.0 (Webpack 4) で Asset Versioning & Hot Module Replacement

Last updated at Posted at 2018-11-23

Webpack Encore が 0.21.0 になり、Webpack 4 に対応しました。生成したファイルの埋め込みは asset() ではなく専用の関数を使うことで、バージョニングや SplitChunks で分割されたファイルにも対応するようになりました。

参考

手順

アセットビルド設定

Webpack Encore は 0.21.0 以降をインストールする。(依存関係により Webpack 4 がインストールされる。)

$ yarn add --dev @symfony/webpack-encore@^0.21.0

必要なローダーをインストールする。

$ yarn add --dev node-sass sass-loader typescript ts-loader

webpack.config.js を設定する。(例)

const Encore = require('@symfony/webpack-encore');
Encore
    .setOutputPath('web/build/')
    .setPublicPath('/build')
    .setManifestKeyPrefix('build/')
    .addEntry('app', ['./assets/js/app.ts', './assets/css/app.scss'])
    .enableTypeScriptLoader()
    .enableSassLoader()
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
    .enableSingleRuntimeChunk()
    .splitEntryChunks()
;
module.exports = Encore.getWebpackConfig();

packages.json に追記

{
    "scripts": {
        "build": "encore"
    }
}

ビルドする

$ yarn encore dev

プロダクションビルド

$ yarn encore production

HMR

$ yarn encore dev-server --hot

HTMLに埋め込む

Webpack Encore Bundle をインストールする。

$ composer require symfony/webpack-encore-bundle

app/AppKernel.php にバンドルを追加し、有効化する。

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            (略)
            new Symfony\WebpackEncoreBundle\WebpackEncoreBundle(),
        );
    }
}

app/config/config.yml に Webpack でビルドされたパスを指定してあげる。

webpack_encore:
    output_path: '%kernel.project_dir%/web/build'

Twig テンプレートに以下のように記述することで、ビルドされたファイル名が自動的に入ります。

{% block stylesheets %}
   {{ encore_entry_link_tags('app') }}
{% endblock %}

{% block javascripts %}
    {{ encore_entry_script_tags('app') }}
{% endblock %}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2