Skip to content

Commit e02d937

Browse files
jkzingyyx990803
authored andcommitted
fix: keep style index consistent when filtering styles (#1496)
* fix: keep index when filtering styles * test: update test fixture to address issue
1 parent e1d4071 commit e02d937

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

Diff for: lib/codegen/styleInjection.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -70,26 +70,31 @@ module.exports = function genStyleInjectionCode (
7070
}
7171
}
7272

73-
// filter out empty styles (with no `src` specified or only contains whitespaces)
74-
styles = styles.filter(style => style.src || nonWhitespaceRE.test(style.content))
73+
// empty styles: with no `src` specified or only contains whitespaces
74+
const isNotEmptyStyle = style => style.src || nonWhitespaceRE.test(style.content)
7575
// explicit injection is needed in SSR (for critical CSS collection)
7676
// or in Shadow Mode (for injection into shadow root)
7777
// In these modes, vue-style-loader exports objects with the __inject__
7878
// method; otherwise we simply import the styles.
7979
if (!needsExplicitInjection) {
8080
styles.forEach((style, i) => {
81-
const request = genStyleRequest(style, i)
82-
styleImportsCode += `import style${i} from ${request}\n`
83-
if (style.module) genCSSModulesCode(style, request, i)
81+
// do not generate requests for empty styles
82+
if (isNotEmptyStyle(style)) {
83+
const request = genStyleRequest(style, i)
84+
styleImportsCode += `import style${i} from ${request}\n`
85+
if (style.module) genCSSModulesCode(style, request, i)
86+
}
8487
})
8588
} else {
8689
styles.forEach((style, i) => {
87-
const request = genStyleRequest(style, i)
88-
styleInjectionCode += (
89-
`var style${i} = require(${request})\n` +
90-
`if (style${i}.__inject__) style${i}.__inject__(context)\n`
91-
)
92-
if (style.module) genCSSModulesCode(style, request, i)
90+
if (isNotEmptyStyle(style)) {
91+
const request = genStyleRequest(style, i)
92+
styleInjectionCode += (
93+
`var style${i} = require(${request})\n` +
94+
`if (style${i}.__inject__) style${i}.__inject__(context)\n`
95+
)
96+
if (style.module) genCSSModulesCode(style, request, i)
97+
}
9398
})
9499
}
95100

Diff for: test/fixtures/basic.vue

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export default {
1212
}
1313
</script>
1414

15+
<style>
16+
17+
</style>
18+
19+
1520
<style>
1621
comp-a h2 {
1722
color: #f00;

0 commit comments

Comments
 (0)