Commit eab94603 authored by Evan You's avatar Evan You

fix: make sure cloned rules reuse the exact same ident in options

close #1199
parent 343b9df0
......@@ -35,7 +35,7 @@ module.exports = class VueLoaderPlugin {
// find the normalized version of the vue rule
const normalizedVueRule = rawNormalizedRules[vueRuleIndex]
// get the normlized "use" for vue files
const normalizedVueUse = normalizedVueRule.use.map(cleanUse)
const normalizedVueUse = normalizedVueRule.use
// get vue-loader options
const vueLoaderUseIndex = normalizedVueUse.findIndex(u => {
return /^vue-loader|(\/|\\)vue-loader/.test(u.loader)
......@@ -83,7 +83,7 @@ module.exports = class VueLoaderPlugin {
// for each user rule, inject a cloned rule by checking if the rule
// matches the lang specified in the resourceQuery.
rawRules.unshift.apply(rawRules, baseRules.map((rule, i) => {
return cloneRule(rule, normalizedRules[i], normalizedVueUse)
return cloneRule(rule, normalizedRules[i])
}))
// inject global pitcher (responsible for injecting template compiler
......@@ -91,12 +91,10 @@ module.exports = class VueLoaderPlugin {
rawRules.unshift({
loader: require.resolve('./loaders/pitch')
})
// console.log(rawRules)
}
}
function cloneRule (rule, normalizedRule, vueUse) {
function cloneRule (rule, normalizedRule) {
// Assuming `test` and `resourceQuery` tests are executed in series and
// synchronously (which is true based on RuleSet's implementation), we can
// save the current resource being matched from `test` so that we can access
......@@ -123,13 +121,9 @@ function cloneRule (rule, normalizedRule, vueUse) {
}
return true
},
use: (normalizedRule.use || []).map(cleanUse)
use: normalizedRule.use ? normalizedRule.use.map(reuseIdent) : undefined
})
if (!res.use.length) {
delete res.use
}
// delete shorthand since we have normalized use
delete res.loader
delete res.loaders
......@@ -137,17 +131,17 @@ function cloneRule (rule, normalizedRule, vueUse) {
if (rule.oneOf) {
res.oneOf = rule.oneOf.map((r, i) => {
return cloneRule(r, normalizedRule.oneOf[i], vueUse)
return cloneRule(r, normalizedRule.oneOf[i])
})
}
return res
}
// "ident" is exposed on normalized uses, delete in case it
// interferes with another normalization
function cleanUse (use) {
const res = Object.assign({}, use)
delete res.ident
return res
function reuseIdent (use) {
if (use.ident) {
use.options.ident = use.ident
delete use.ident
}
return use
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment