Мспользование 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. Теперь это не нужно.