@@ -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