diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f32e4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +node_modules \ No newline at end of file diff --git a/index.js b/index.js index 95b95e4..f45a108 100644 --- a/index.js +++ b/index.js @@ -1,26 +1,39 @@ 'use strict'; const juice = require('juice'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); let juiceOptions; +const pluginName = 'html-webpack-inline-style-plugin'; + function HtmlWebpackInlinerPlugin(options) { // Initialize - juiceOptions = options.juiceOptions || {}; + juiceOptions = options && options.juiceOptions || {}; } HtmlWebpackInlinerPlugin.prototype.apply = compiler => { - (compiler.hooks - ? compiler.hooks.compilation.tap.bind(compiler.hooks.compilation, 'html-webpack-inline-style-plugin') - : compiler.plugin.bind(compiler, 'compilation'))(compilation => { - - (compilation.hooks - ? compilation.hooks.htmlWebpackPluginAfterHtmlProcessing.tapAsync.bind(compilation.hooks.htmlWebpackPluginAfterHtmlProcessing, 'html-webpack-inline-style-plugin') - : compilation.plugin.bind(compilation, 'html-webpack-plugin-after-html-processing'))((htmlPluginData, callback) => { - htmlPluginData.html = juice(htmlPluginData.html, juiceOptions); - callback(null, htmlPluginData); - }); - }); + + const handleCompilation = (compiler, callback) => compiler.hooks + ? compiler.hooks.compilation.tap(pluginName, callback) + : compiler.plugin('compilation', callback); + + const handleAfterHtmlProcess = (compilation, callback) => { + if (compilation.hooks) { + // Fix HtmlWebpackPlugin >= 4 + const afterHtmlProcessHook = + compilation.hooks.htmlWebpackPluginAfterHtmlProcessing || + HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution + afterHtmlProcessHook.tapAsync(pluginName, callback) + } else { + compilation.plugin('html-webpack-plugin-after-html-processing', callback); + } + } + + handleCompilation(compiler, compilation => handleAfterHtmlProcess(compilation, (htmlPluginData, callback) => { + htmlPluginData.html = juice(htmlPluginData.html, juiceOptions); + callback(null, htmlPluginData); + })); }; module.exports = HtmlWebpackInlinerPlugin; diff --git a/package.json b/package.json index cd14d67..ad30f8d 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,8 @@ "homepage": "https://github.com/djaax/html-webpack-inline-style-plugin", "dependencies": { "juice": "^4.2.2" + }, + "devDependencies": { + "html-webpack-plugin": "^4.3.0" } }