Мспользование webpack-dev-server и HMR

Дата обновления перевода 2024-07-25

Мспользование webpack-dev-server и HMR

При разработке, вместо использования encore dev --watch, вы можете использовать webpack-dev-server:

1
$ npm run dev-server

Это создает и обслушивает фронтенд ресурсы из нового сервера. Этот сервер по умолчанию работает на localhost:8080, что значит, что ваши ресурсы доступны по адресу localhost:8080/build. Этот сервер на самом деле не записывает файлы на диск; вместо этого, он обслуживает их из памяти, позволяя горячую перестройку модулей.

Как следствие, теги link и script должны указывать на новый сервер. Если вы используете сокращения Twig encore_entry_script_tags() b encore_entry_link_tags() (или обрабатываете свои ресурсы через entrypoints.json каким-то другим образом), вы закончили: пути в ваших шаблонах будут автоматически указывать на сервер dev.

Опции dev-server

Команда dev-server поддерживает все опции, определенные webpack-dev-server. Вы можете установить эти опции через командную строку опций:

1
$ npm run dev-server -- --port 9000

Вы также можете установить эти опции используя метод Encore.configureDevServerOptions() в вашем файле webpack.config.js:

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',
            }
        }
    })
;

Включение HTTPS с использованием ееб-сервера Symfony

Если вы используете веб-сервер Symfony локально с HTTPS, вам нужно будет также сообщить dev-server использовать HTTPS. Чтобы сделать это, вы можете снова использовать SSL сертификат веб-сервера Symfony:

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'),
+             }
+         }
+     })

Note

Если вы используете Node.js 17 или новее и dev-server не запускается с ошибкой TLS,
файл сертификата может быть сгенерирован старой версией symfony-cli. Обновите symfony-cli до последней версии, удалите старый файл ~/.symfony5/certs/default.p12, и снова запустите сервер symfony.

В результате будет сгенерирован новый файл default.p12, подходящий для использования с последними версиями Node.js.

Проблемы CORS

Если вы сталкиваетесь с проблемами, связанными с CORS (Совместное использование ресурсовм между разными источниками), установите следующую опцию:

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

Encore
    // ...

    .configureDevServerOptions(options => {
        options.allowedHosts = 'all';
        // в более старых версиях Webpack Dev Server, вместо этого используйте эту опцию:
        // options.firewall = false;
    })

Помните, что в общей практике безопасности это не рекомендуется, но здесь это обязательно для решения проблемы CORS.

Замена горячего модуля HMR

Горячая замена модуля - это суперсила dev-server, где стили и (в некоторых случаях) JavaScript могут автоматически обновляться без необходимости перезагрузки страницы. HMR автоматически работает с CSS (если вы используете `dev-server`` и Encore 1.0 или новее), но при этом работает только с некоторыми JavaScript (вроде Vue.js).

Перезагрузка в реальном времени при изменении файлов PHP / Twig

Чтобы использовать супер-силу замены горячего модуля с перезагрузкой в реальном времени для вашего PHP-кода и шаблонов, установите следующие опции:

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

Encore
    // ...

    .configureDevServerOptions(options => {
        options.liveReload = true;
        options.static = {
            watch: false
        };
        options.watchFiles = {
            paths: ['src/**/*.php', 'templates/**/*'],
        };
    })

Опция static.watch обязательна, чтобы отключить перезагрузку файлов по умолчанию из статичного каталога, так как эти файли уже были обработаны HMR.

1.0.0

До Encore 1.0, вам нужно было передавать флажок --hot командной строке для включения HMR. Вам также нужно было отключать извлечение CSS, чтобы включить HMR для CSS. Теперь это не нужно.