fix: set scripts imported by HTML moduleSideEffects=true #18411
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
When setting
moduleSideEffects: false
, all scripts gets tree-shaked and the built output becomes empty. This is because we convert HTML files into a JS file just containing side effect imports that points to thehref
attr of script tags.While the behavior is correct (the scripts do have a side-effect and setting it
false
is a lie) and kind of expected, it is more easier to configure if these scripts are marked asmoduleSideEffects: true
as in most cases you won't rely on side-effect imports. (The correct way of fixing this is to settreeshake.moduleSideEffects: (id) => scriptsImportedByHtml.includes(id)
instead.)fixes #16720
fixes #17911
This PR reverts #12786 as this fix covers that one as well. (To fix that one correctly, the
sideEffects
field should include the scripts imported by the HTML file.)