Webpack - html-webpack-plugin - 一个文件名 - 多注入

时间:2016-12-27 23:44:43

标签: 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的最后一块。

1 个答案:

答案 0 :(得分:0)

您可以尝试将项目分叉,然后将代码改为如下:
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
    })
  ]