Використання webpack-dev-server і HMR
Дата оновлення перекладу 2024-05-27
Використання 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()
та 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-серверу використовувати HTTPS. Щоб зробити це, ви можете знов використати сертифікат веб-серверу 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
обовʼязкова, щоб відключити перезавантаження файлів за
замовчуванням зі статичного каталогу, так як ці файли вже були оброблені заміною
гарячого модуля.
1.0.0
До Encore 1.0, вам потрібно було передавати прапорець --hot
у командному рядку
для увімкнення HMR. Вам також потрібно було відключати витяг CSS, щоб увімкнути HMR
для CSS. Тепер це не потрібно.