Webpack — html-webpack-plugin — одно имя файла — множественная инъекция

Можно ли использовать html-webpack-plugin для записи некоторых блоков в голове и некоторых в теле?

Это моя конфигурация для html-webpack-plugin:

var HtmlWebpackPluginConfigIndex = {
  template: path.join(__dirname, 'src/core/server/views', 'index.dust'),
  filename: 'core/server/views/index.dust',
  hash: true,
  chunksSortMode: 'none'
  // chunks: ['core/public/js/vendor']
};

Когда я использую копию с этой конфигурацией, но с измененными фрагментами:

var HtmlWebpackPluginConfigIndex = {
  template: path.join(__dirname, 'src/core/server/views', 'index.dust'),
  filename: 'core/server/views/index.dust',
  hash: true,
  inject: 'head',
  chunksSortMode: 'none'
  chunks: ['core/public/js/vendor']
};


var HtmlWebpackPluginConfigIndex2 = {
  template: path.join(__dirname, 'src/core/server/views', 'index.dust'),
  filename: 'core/server/views/index.dust',
  hash: true,
  inject: 'body',
  chunksSortMode: 'none'
  chunks: ['core/public/js/app']
};

....

new HtmlWebpackPlugin(HtmlWebpackPluginConfigIndex);
new HtmlWebpackPlugin(HtmlWebpackPluginConfigIndex2);

Webpack применяет только последний фрагмент для html-webpack-plugin.


person IceManSpy    schedule 27.12.2016    source источник


Ответы (1)


вы можете попробовать разветвить проект, а затем изменить код примерно так:
html-webpack-plugin index.js:

HtmlWebpackPlugin.prototype.generateAssetTags = function (assets) {
    ...
    // Add scripts to body or head
    //  <<< You would add this bit >>>
    if (!! this.options.headScripts) {
        var hScripts = this.options.headScripts;
        head = head.concat(scripts.filter((s) => {
          var src = s.attributes.src;
          return hScripts.indexOf(src) > -1;
        }));
        body = body.concat(scripts.filter((s) => {
          var src = s.attributes.src;
          return hScripts.indexOf(src) < 0;
        }));
    // <<< to here (and the following "else" in front of the if) >>>
    else if (this.options.inject === 'head') {
   ...
 }

а затем добавьте параметр headScripts в определение вашего плагина:

plugins: [
    new HTMLWebpackPlugin({
      template: path.join(__dirname, 'src','core','server','views', 'index.dust'),
      filename: 'core/server/views/index.dust',
      headScripts: ['vendor.bundle.js'] // or whatever your output filename is
    })
  ]
person WeezyKrush    schedule 14.02.2018