Using webpack-dev-server and HMR

While developing, instead of using yarn encore dev --watch, you can use the webpack-dev-server:

開発中は、yarn encore dev --watch を使用する代わりに、webpack-dev-server を使用できます。
1
2
3
4
5
# if you use the Yarn package manager
$ yarn encore dev-server

# if you use the npm package manager
$ npm run dev-server

This builds and serves the front-end assets from a new server. This server runs at localhost:8080 by default, meaning your build assets are available at localhost:8080/build. This server does not actually write the files to disk; instead it serves them from memory, allowing for hot module reloading.

これにより、新しいサーバーからフロントエンド アセットが構築および提供されます。このサーバーはデフォルトで localhost:8080 で実行されます。つまり、ビルド アセットは localhost:8080/build で利用できます。このサーバーは実際にはファイルをディスクに書き込みません。代わりに、メモリからそれらを提供し、ホット モジュールのリロードを可能にします。

As a consequence, the link and script tags need to point to the new server. If you're using the encore_entry_script_tags() and encore_entry_link_tags() Twig shortcuts (or are processing your assets through entrypoints.json in some other way), you're done: the paths in your templates will automatically point to the dev server.

結果として、link タグと script タグは新しいサーバーを指す必要があります。 encore_entry_script_tags() および encore_entry_link_tags() Twig ショートカットを使用している (または、他の方法で entrypoints.json を介してアセットを処理している) 場合は、完了です。テンプレート内のパスは、自動的に開発サーバーを指します。

dev-server Options

The dev-server command supports all the options defined by webpack-dev-server. You can set these options via command line options:

dev-server コマンドは、webpack-dev-server で定義されたすべてのオプションをサポートします。これらのオプションは、コマンド ライン オプションを使用して設定できます。
1
2
3
4
5
# if you use the Yarn package manager
$ yarn encore dev-server --port 9000

# if you use the npm package manager
$ npm run dev-server -- --port 9000

You can also set these options using the Encore.configureDevServerOptions() method in your webpack.config.js file:

これらのオプションは、webpack.config.js ファイルで Encore.configureDevServerOptions() メソッドを使用して設定することもできます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// webpack.config.js
// ...

Encore
    // ...

    .configureDevServerOptions(options => {
        options.server = {
            type: 'https',
            options: {
                key: '/path/to/server.key',
                cert: '/path/to/server.crt',
            }
        }
    })
;

Enabling HTTPS using the Symfony Web Server

If you're using the Symfony web server locally with HTTPS, you'll need to also tell the dev-server to use HTTPS. To do this, you can reuse the Symfony web server SSL certificate:

HTTPS を使用して Symfony Web サーバーをローカルで使用している場合は、開発サーバーにも HTTPS を使用するように指示する必要があります。これを行うには、Symfony Web サーバー SSL 証明書を再利用できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// webpack.config.js
  // ...
+ const path = require('path');

  Encore
      // ...

+     .configureDevServerOptions(options => {
+         options.server = {
+             type: 'https',
+             options: {
+                 pfx: path.join(process.env.HOME, '.symfony5/certs/default.p12'),
+             }
+         }
+     })

CORS Issues

If you experience issues related to CORS (Cross Origin Resource Sharing), set the following option:

CORS (Cross Origin Resource Sharing) に関連する問題が発生した場合は、次のオプションを設定します。
1
2
3
4
5
6
7
8
9
10
11
// webpack.config.js
// ...

Encore
    // ...

    .configureDevServerOptions(options => {
        options.allowedHosts = 'all';
        // in older Webpack Dev Server versions, use this option instead:
        // options.firewall = false;
    })

Beware that this is not a recommended security practice in general, but here it's required to solve the CORS issue.

これは一般的に推奨されるセキュリティ プラクティスではありませんが、ここでは CORS の問題を解決するために必要であることに注意してください。

Hot Module Replacement HMR

Hot module replacement is a superpower of the dev-server where styles and (in some cases) JavaScript can automatically update without needing to reload your page. HMR works automatically with CSS (as long as you're using the dev-server and Encore 1.0 or higher) but only works with some JavaScript (like Vue.js).

ホットモジュール交換は、ページをリロードする必要なく、スタイルと (場合によっては) JavaScript を自動的に更新できる開発サーバーのスーパーパワーです。 HMR は CSS で自動的に動作します (dev-server と Encore 1.0 以降を使用している場合) が、一部の JavaScript (Vue.js など) でのみ動作します。

1.0.0

1.0.0

Before Encore 1.0, you needed to pass a --hot flag at the command line to enable HMR. You also needed to disable CSS extraction to enable HMR for CSS. That is no longer needed.

Encore 1.0 より前は、コマンド ラインで --hot フラグを渡して HMR を有効にする必要がありました。 HMR forCSS を有効にするには、CSS 抽出を無効にする必要もありました。それはもう必要ありません。