Синхронизация браузера не выполняет повторную визуализацию частичных файлов EJS

Я использую Browser Sync с Webpack и Express для разработки простого веб-сайта с использованием шаблонов EJS. Все работает нормально, за исключением того факта, что синхронизация браузера, похоже, не отображает недавно обновленные частичные части EJS при перезагрузке браузера.

Однако на самом деле он замечает, что в частичном файле есть изменение, и, когда я сохраняю в нем изменение, перезагружает окно браузера.

Я попытался использовать несколько путей, которые варьируются от **/*.ejs до прямой установки папок с использованием массива, как показано ниже:

        new BrowserSyncPlugin({
            files: ['src/views/pages/index.ejs', 'src/views/pages/partials/header.ejs'],
            proxy: `https://localhost:${process.env.PORT}`
        }),

У меня есть ощущение, что это может быть какой-то конфликт с синхронизацией браузера, плагином Html Webpack или загрузчиком EJS Webpack. Соответствующие строки конфигурации приведены ниже:

        new BrowserSyncPlugin({
            files: ['src/views/pages/index.ejs', 'src/views/pages/partials/header.ejs'],
            proxy: `https://localhost:${process.env.PORT}`
        }),
        new HtmlWebpackPlugin({
            template: 'ejs-webpack-loader!src/views/pages/index.ejs',
            filename: 'index.html',
            domain: process.env.DOMAIN
        }),

И, чтобы дать некоторый контекст, файл header.ejs включен следующим образом:

        <%- include partials/header.ejs %> 

Я предполагаю, что это как-то связано с одним из загрузчиков, поскольку синхронизация браузера фактически замечает изменения и перезагружает страницу. Загрузчик просто не включает повторный рендеринг. Однако, если я внесу прямое изменение в index.ejs, оно фактически повторно отобразит изменение.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Конфигурация моего сервера Express выглядит следующим образом:

require('dotenv').config({path: './.env'});
const express = require('express');
const app = express();
const WebpackDevMiddleware = require('webpack-dev-middleware');
const https = require('https');
const fs = require('fs');
const config = require('../webpack.dev');
const helmet = require('helmet');
const webpack = require('webpack');
const compiler = webpack(config);

const {
    SSL_CERT,
    SSL_KEY,
    SSL_PW,
    PORT
} = process.env;
const httpsOptions = {
    key: fs.readFileSync(SSL_KEY),
    cert: fs.readFileSync(SSL_CERT),
    passphrase: SSL_PW
};
const secureServer = https.createServer(httpsOptions, app);
app.use(helmet());

app.use(WebpackDevMiddleware(compiler, {
    publicPath: config.output.publicPath,
    reload: true
}));

const listener = secureServer.listen(PORT, () => console.log(`Connected on ${listener.address().port}`));

Еще одно замечание: если я сохраню index.ejs, он отобразит изменения, внесенные в дочерние элементы.


person MakingStuffs    schedule 04.04.2020    source источник


Ответы (2)


Пожалуйста, обратитесь к конфигурации 'devServer' здесь:

 devServer: {
        open: true,
        contentBase: path.resolve(`src`), // Specify your source path
        inline:true,
        watchContentBase: true, // Must be true
        port: 4000,
        host: "127.0.0.1",
        overlay: {
            errors: true,
            warnings: false
        },
    },
person Raos    schedule 07.04.2020
comment
Спасибо за вклад, однако на самом деле я не являюсь сервером разработки webpack. Я использую Express с webpack-dev-middleware. - person MakingStuffs; 07.04.2020

Проблема в том, что плагин ejs-webpack-loader не обрабатывает повторный рендеринг включенных файлов.

Чтобы обойти это, необходимо использовать стандартный метод webpack require().

Итак, мой файл index.ejs теперь выглядит следующим образом:

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-GB"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <%- include partials/head.ejs %> 
        <title>Making Stuffs | Coming Soon Boilerplate</title>
    </head>
    <body>
        <!--[if lt IE 7]>
            <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="#">upgrade your browser</a> to improve your experience.</p>
        <![endif]-->
        <%- require ('ejs-webpack-loader!./partials/navbar.ejs')() %>
        <%- require ('ejs-webpack-loader!./partials/intro.ejs')() %> 
        <%- require ('ejs-webpack-loader!./partials/about.ejs')() %> 
        <%- require ('ejs-webpack-loader!./partials/portfolio.ejs')() %> 
        <%- require ('ejs-webpack-loader!./partials/contact.ejs')() %> 
        <%- require ('ejs-webpack-loader!./partials/blog.ejs')() %> 
    </body>
</html>
person MakingStuffs    schedule 11.04.2020