webpack-group-assets-plugin.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. const HtmlWebpackPlugin = require('html-webpack-plugin');
  2. class GroupAssetsPlugin {
  3. apply(compiler) {
  4. compiler.hooks.compilation.tap('GroupAssetsPlugin', (compilation) => {
  5. HtmlWebpackPlugin.getHooks(compilation).alterAssetTagGroups.tapAsync(
  6. 'GroupAssetsPlugin', (data, callback) => {
  7. this.groupAssets(data);
  8. console.log('grouped', data);
  9. callback(null, data);
  10. }
  11. );
  12. });
  13. }
  14. groupAssets(data) {
  15. const { injectTo } = data.plugin.options;
  16. if (typeof injectTo === 'function') {
  17. const groups = { head: [], body: [] };
  18. [
  19. ['head', data.headTags],
  20. ['body', data.bodyTags],
  21. ].forEach(([defaultGroup, items]) => {
  22. items.forEach(item => {
  23. const groupName = injectTo(item, defaultGroup);
  24. const group = groups[groupName] || groups[defaultGroup];
  25. group.push(item);
  26. });
  27. });
  28. data.headTags = groups.head;
  29. data.bodyTags = groups.body;
  30. }
  31. }
  32. }
  33. module.exports = GroupAssetsPlugin;