New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow use of contenthash along with templatehash #1065
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work. Thanks for this. I hope it gets merged.
index.js
Outdated
// `contenthash` is introduced in webpack v4.3 | ||
// which conflicts with the plugin's existing `contenthash` method, hence | ||
// hence is renmaed to `templatehash` to avoid such conflicts | ||
const REGEXP_CONTENTHASH = /\[(?:(\w+):)?contenthash(?::([a-z]+\d*))?(?::(\d+))?\]/ig; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this could be simplified to:
this.options.filename = this.options.filename.replace(REGEXP_CONTENTHASH, (match) => {
return match.replace('contenthash', 'templatehash');
});
No need for the verbose variable declaration and the if check.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I thought of moving them both to the very top. hence assigned to a variable. Which I thought may be reusable in future.
index.js
Outdated
@@ -99,6 +99,16 @@ class HtmlWebpackPlugin { | |||
this.options.filename = path.relative(compiler.options.output.path, filename); | |||
} | |||
|
|||
// `contenthash` is introduced in webpack v4.3 | |||
// which conflicts with the plugin's existing `contenthash` method, hence | |||
// hence is renmaed to `templatehash` to avoid such conflicts |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo and extra hence here 😸
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will fix, thanks 👍
index.js
Outdated
// Allow to use [templatehash] as placeholder for the html-webpack-plugin name | ||
// See also https://survivejs.com/webpack/optimizing/adding-hashes-to-filenames/ | ||
// From https://github.com/webpack-contrib/extract-text-webpack-plugin/blob/8de6558e33487e7606e7cd7cb2adc2cccafef272/src/index.js#L212-L214 | ||
const finalOutputName = childCompilationOutputName.replace(/\[(?:(\w+):)?templatehash(?::([a-z]+\d*))?(?::(\d+))?\]/ig, (_, hashType, digestType, maxLength) => { | ||
const finalOutputName = childCompilationOutputName.replace(REGEXP_TEMPLATEHASH, (_, hashType, digestType, maxLength) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, maybe it's just me but I would prefer to see the regex directly here and not having to look for the verbose variable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree - it would be easier to read if we just copy the regexp into the replace
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay. Updated 👍
Hi @jantimon After beta.1 few important changes were added, can we have another |
Sure I'll try to release it this weekend :) |
This allows to use
contenthash
which was removed in #1062 . Now when filename is provided withcontenthash
it will be internally replaced totemplatehash
Fixes: #1033