В настоящее время я динамически добавляю шаблоны в мой 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» создан правильно, он просто не получаетподается в массив плагинов.