Closed
Description
Is this a bug report?
Yes
Steps to Reproduce
- create a new CRA project
- add this script in your index.html :
<script>
var isProduction = '%NODE_ENV%' === 'production'
</script>
- run
yarn build
Expected Behavior
Expect index.html output :
<!-- content before -->
<script>var isProduction = !0</script>
<!-- content after -->
Actual Behavior
Actual index.html output :
<!-- content before -->
<script>var isProduction = !1</script>
<!-- content after -->
Why it happens ?
The bug is due to wrong event/hook selection in InterpolateHtmlPlugin.
With beforeEmit event, The uglification of javascript in the index.html is done before the replacement of environment variables, so step by step we have :
- raw js
var env = '%NODE_ENV%'
var isProduction = '%NODE_ENV%' === 'production'
- uglify (+ compress)
var env='%NODE_ENV%'
var isProduction=!1
- replace env var
var env='production'
var isProduction=!1
How to fix ?
In html-webpack-plugin, html minification (and js uglify) is done via html-minifier just after the afterTemplateExecution.
So we need to use the afterTemplateExecution event to replace env vars before uglify.
It's the first time where we have the html output, so It seams to be more relevant to replace env vars in the html with this hook.
Activity
stale commentedon Mar 19, 2019
This issue has been automatically marked as stale because it has not had any recent activity. It will be closed in 5 days if no further activity occurs.
olessavluk commentedon Mar 20, 2019
Same issue was reported earlier - #5473
olessavluk commentedon Mar 24, 2019
What about the following example:
Since
InterpolateHtmlPlugin
appliedafterTemplateExecution
this placeholder would not be replaced.Is it possible to run this plugin before any processing so it will work? Or maybe a better solution would be to pass ENV variables as options to
HtmlWebpackPlugin
, so they can be used during template execution?GuiHash commentedon Mar 27, 2019
@olessavluk,
This placeholder is not officially support by documentation.
Moreover, look at this issue : #4202
olessavluk commentedon Mar 27, 2019
@GuiHash yes, this is what I am looking for. Thanks for pointing this issue!
However, I think it can be done without breaking changes (no need to change the file extension, and syntax right now). I will create separate issue & probably PR with proper description
Edit InterpolateHtmlPlugin hook (#6448) (#6449)