Могу ли я перезагружать плагины веб-пакета после перекомпоновки веб-пакета - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я динамически добавляю шаблоны в мой HtmlWebpackPlugin, например:

var PROD = JSON.parse(process.env.PROD_ENV || '0');

function prepareHtml(){

    console.log(PROD);
    pages = [];
    config = require('./src/core/js/config-modulo');
    var size = Object.keys(config).length;
    for(var i = 0; i<size; i++){

        for(var j = 0; j<config[i+1].num_pages; j++){
            if(!(fs.existsSync('./src/und'+(i+1)+'/'+(j+1)+'.html'))){
                var modelo = '<html lang="pt-br">\n<head>\n<meta charset="UTF-8">\n<meta name="viewport" content="width=device-width, initial-scale=1.0">\n<title>Livro On-line</title>\n<script type="text/javascript" src="config-livro.js"></script>\n</head>\n<body>\n<div class="page">\n<div class="header"></div>\n<div class="conteudo">\n<!-- ================================================================== -->\n<!-- ================================================================== -->\n</div> <!-- End conteudo -->\n</div> <!-- End page -->\n<!-- Scripts -->\n</body>\n</html>';
                fs.outputFileSync('./src/und'+(i+1)+'/'+(j+1)+'.html',modelo);
            }
            var page = new HtmlWebpackPlugin({
                filename: '../../und'+(i+1)+'/'+(j+1)+'.html',
                template: './src/und'+(i+1)+'/'+(j+1)+'.html',
                });
            pages.push(page);
        }
        var newconfig = 'UNIDADE_NUMBER = '+(i+1)+';\n'+
                        'UNIDADE_NAME = "'+config[i+1].nome_unidade+'";\n'+
                        'LINK_PDF = "'+config[i+1].link_pdf+'";\n'+
                        'PAGES_TOTAL = '+config[i+1].num_pages+';';

        var caminho = 'dist/und'+(i+1); 

        if(PROD){ 
            console.log(PROD);
            fs.outputFile(caminho+'/config-livro.js', newconfig, function (err) {
                if(err) console.log(err);
            });
        }
    }
    delete require.cache[require.resolve('./src/core/js/config-modulo')];
    console.log(pages);
}

Вызов этой функции prepareHtml() и последующее объединение ее результатов с массивом моих плагинов.

Проблемав том, что когда запускается webpack --watch, функция работает нормально, но конфигурации плагина не обновляются, я знаю, потому что новые файлы не отслеживаются и не обрабатываются.

Я использую WebpackPreBuildPlugin дляперезапускайте функцию при каждой сборке.

Есть ли способ, которым я могу "перестраивать" свои плагины каждый раз, когда запускается webpack --watch?

РЕДАКТИРОВАТЬ: я добавляю плагины, как это:

plugins: [
        new WebpackPreBuildPlugin(function(stats) {
            prepareHtml();
        }),
        new ExtractTextPlugin({
            filename: '../css/livro.css',
            disable: false,
            allChunks: true
        }),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery'
          })
    ].concat(pages)

Где переменная "pages" генерируется функцией prepareHtml.

Я знаю этоработает, потому что когда я в первый раз запускаю webpack - наблюдаю за тем, как все файлы генерируются и правильно отслеживаются, проблема в том, что динамически добавляются новые файлы, функция работает нормально, массив «pages» создан правильно, он просто не получаетподается в массив плагинов.

1 Ответ

0 голосов
/ 08 октября 2018

Я не думаю, что это легко выполнимо, так как плагины - это просто вещи, которые "применяются" к компилятору внутри , то есть они устанавливают хуки в компиляторе;вам нужно только осторожно применять новые плагины к компилятору самостоятельно.

Вместо этого, если вам действительно нужна эта функциональность, я бы предложил написать свой собственный плагин Webpack, который обернет эти динамически созданные экземпляры HtmlWebpackPlugin изапускает их на том же этапе, что и HtmlWebpackPlugin, с вашей динамической конфигурацией.

В противном случае ... в вашем файле readme было бы проще всего отметить, что вам нужно перезапустить процесс наблюдения, если вы добавите новыйстраницы.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...