Skip to content

Commit eab9460

Browse files
committed
fix: make sure cloned rules reuse the exact same ident in options
close #1199
1 parent 343b9df commit eab9460

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

Diff for: lib/plugin.js

+11-17
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module.exports = class VueLoaderPlugin {
3535
// find the normalized version of the vue rule
3636
const normalizedVueRule = rawNormalizedRules[vueRuleIndex]
3737
// get the normlized "use" for vue files
38-
const normalizedVueUse = normalizedVueRule.use.map(cleanUse)
38+
const normalizedVueUse = normalizedVueRule.use
3939
// get vue-loader options
4040
const vueLoaderUseIndex = normalizedVueUse.findIndex(u => {
4141
return /^vue-loader|(\/|\\)vue-loader/.test(u.loader)
@@ -83,20 +83,18 @@ module.exports = class VueLoaderPlugin {
8383
// for each user rule, inject a cloned rule by checking if the rule
8484
// matches the lang specified in the resourceQuery.
8585
rawRules.unshift.apply(rawRules, baseRules.map((rule, i) => {
86-
return cloneRule(rule, normalizedRules[i], normalizedVueUse)
86+
return cloneRule(rule, normalizedRules[i])
8787
}))
8888

8989
// inject global pitcher (responsible for injecting template compiler
9090
// loader & CSS post loader)
9191
rawRules.unshift({
9292
loader: require.resolve('./loaders/pitch')
9393
})
94-
95-
// console.log(rawRules)
9694
}
9795
}
9896

99-
function cloneRule (rule, normalizedRule, vueUse) {
97+
function cloneRule (rule, normalizedRule) {
10098
// Assuming `test` and `resourceQuery` tests are executed in series and
10199
// synchronously (which is true based on RuleSet's implementation), we can
102100
// save the current resource being matched from `test` so that we can access
@@ -123,31 +121,27 @@ function cloneRule (rule, normalizedRule, vueUse) {
123121
}
124122
return true
125123
},
126-
use: (normalizedRule.use || []).map(cleanUse)
124+
use: normalizedRule.use ? normalizedRule.use.map(reuseIdent) : undefined
127125
})
128126

129-
if (!res.use.length) {
130-
delete res.use
131-
}
132-
133127
// delete shorthand since we have normalized use
134128
delete res.loader
135129
delete res.loaders
136130
delete res.options
137131

138132
if (rule.oneOf) {
139133
res.oneOf = rule.oneOf.map((r, i) => {
140-
return cloneRule(r, normalizedRule.oneOf[i], vueUse)
134+
return cloneRule(r, normalizedRule.oneOf[i])
141135
})
142136
}
143137

144138
return res
145139
}
146140

147-
// "ident" is exposed on normalized uses, delete in case it
148-
// interferes with another normalization
149-
function cleanUse (use) {
150-
const res = Object.assign({}, use)
151-
delete res.ident
152-
return res
141+
function reuseIdent (use) {
142+
if (use.ident) {
143+
use.options.ident = use.ident
144+
delete use.ident
145+
}
146+
return use
153147
}

0 commit comments

Comments
 (0)