Skip to content

Commit fb6ff6e

Browse files
committed
fix: skip thread-loader when cloning js rules to template compilation pipeline
Fixes vuejs/vue#12828
1 parent 46ffb4d commit fb6ff6e

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

lib/plugin-webpack4.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ function cloneRuleForRenderFn(rule) {
182182
const resource = rule.resource
183183
const resourceQuery = rule.resourceQuery
184184
let currentResource
185+
185186
const res = {
186187
...rule,
187188
resource: (resource) => {
@@ -204,6 +205,18 @@ function cloneRuleForRenderFn(rule) {
204205
}
205206
}
206207

208+
// Filter out `thread-loader` from the `use` array.
209+
// Mitigate https://github.com/vuejs/vue/issues/12828
210+
// Note this won't work if the `use` filed is a function
211+
if (Array.isArray(res.use)) {
212+
const isThreadLoader = (loader) => loader === 'thread-loader' || /\/node_modules\/thread-loader\//.test(loader)
213+
214+
res.use = res.use.filter(useEntry => {
215+
const loader = typeof useEntry === 'string' ? useEntry : useEntry.loader
216+
return !isThreadLoader(loader)
217+
})
218+
}
219+
207220
if (rule.rules) {
208221
res.rules = rule.rules.map(cloneRuleForRenderFn)
209222
}

lib/plugin-webpack5.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,14 @@ class VueLoaderPlugin {
144144
const { is27 } = resolveCompiler(compiler.options.context)
145145
let jsRulesForRenderFn = []
146146
if (is27) {
147+
const skipThreadLoader = true
147148
jsRulesForRenderFn = rules
148149
.filter(
149150
(r) =>
150151
r !== rawVueRule &&
151152
(match(r, 'test.js').length > 0 || match(r, 'test.ts').length > 0)
152153
)
153-
.map((rawRule) => cloneRule(rawRule, refs, jsRuleCheck, jsRuleResource))
154+
.map((rawRule) => cloneRule(rawRule, refs, jsRuleCheck, jsRuleResource, skipThreadLoader))
154155
}
155156

156157
// global pitcher (responsible for injecting template compiler loader & CSS
@@ -216,7 +217,7 @@ const jsRuleResource = (query, resource) =>
216217

217218
let uid = 0
218219

219-
function cloneRule(rawRule, refs, ruleCheck, ruleResource) {
220+
function cloneRule(rawRule, refs, ruleCheck, ruleResource, skipThreadLoader) {
220221
const compiledRule = ruleSetCompiler.compileRule(
221222
`clonedRuleSet-${++uid}`,
222223
rawRule,
@@ -231,7 +232,19 @@ function cloneRule(rawRule, refs, ruleCheck, ruleResource) {
231232
// fix conflict with config.loader and config.options when using config.use
232233
delete rawRule.loader
233234
delete rawRule.options
234-
rawRule.use = ruleUse
235+
236+
// Filter out `thread-loader` from the `use` array.
237+
// Mitigate https://github.com/vuejs/vue/issues/12828
238+
// Note this won't work if the `use` filed is a function
239+
if (skipThreadLoader && Array.isArray(ruleUse)) {
240+
const isThreadLoader = (loader) => loader === 'thread-loader' || /\/node_modules\/thread-loader\//.test(loader)
241+
rawRule.use = ruleUse.filter(useEntry => {
242+
const loader = typeof useEntry === 'string' ? useEntry : useEntry.loader
243+
return !isThreadLoader(loader)
244+
})
245+
} else {
246+
rawRule.use = ruleUse
247+
}
235248
}
236249

237250
let currentResource

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy