Skip to content

Commit 83c7761

Browse files
committed
fix: 修复组件.mode后缀路径infix参数重复拼接
1 parent 379e41c commit 83c7761

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

packages/webpack-plugin/lib/resolver/AddModePlugin.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,6 @@ module.exports = class AddModePlugin {
2424
if (request.mode || request.env) {
2525
return callback()
2626
}
27-
28-
const queryObj = parseQuery(request.query || '?')
29-
if (queryObj.mode) {
30-
return callback()
31-
}
32-
3327
const obj = {
3428
mode
3529
}
@@ -43,22 +37,33 @@ module.exports = class AddModePlugin {
4337
// 当前资源没有后缀名或者路径不符合fileConditionRules规则时,直接返回
4438
if (!extname || !matchCondition(resourcePath, fileConditionRules)) return callback()
4539

40+
const queryObj = parseQuery(request.query || '?')
4641
const queryInfix = queryObj.infix
47-
if (!implicitMode) queryObj.mode = mode
48-
queryObj.infix = `${queryInfix || ''}.${mode}`
4942

5043
// 如果已经确认是mode后缀的文件,添加query与mode后直接返回
5144
if (modePattern.test(path.basename(resourcePath))) {
52-
request.query = stringifyQuery(queryObj)
53-
request.mode = obj.mode
45+
// 已经被resolved到对应mode的文件,避免重复添加mode
46+
const isResolved = (implicitMode || queryObj.mode === mode) && modePattern.test(queryObj.infix)
47+
if (!isResolved) {
48+
queryObj.infix = `${queryInfix || ''}.${mode}`
49+
if (!implicitMode) queryObj.mode = mode
50+
request.query = stringifyQuery(queryObj)
51+
request.mode = obj.mode
52+
}
5453
return callback()
5554
} else if (defaultMode && defaultModePattern.test(path.basename(resourcePath))) {
56-
queryObj.infix = `${queryInfix || ''}.${defaultMode}`
57-
request.query = stringifyQuery(queryObj)
58-
request.mode = obj.mode
55+
const isResolved = (implicitMode || queryObj.mode === mode) && defaultModePattern.test(queryObj.infix)
56+
if (!isResolved) {
57+
queryObj.infix = `${queryInfix || ''}.${defaultMode}`
58+
if (!implicitMode) queryObj.mode = mode
59+
request.query = stringifyQuery(queryObj)
60+
request.mode = obj.mode
61+
}
5962
return callback()
6063
}
6164

65+
if (!implicitMode) queryObj.mode = mode
66+
queryObj.infix = `${queryInfix || ''}.${mode}`
6267
obj.query = stringifyQuery(queryObj)
6368
obj.path = addInfix(resourcePath, mode, extname)
6469
obj.relativePath = request.relativePath && addInfix(request.relativePath, mode, extname)

0 commit comments

Comments
 (0)