@@ -22,12 +22,14 @@ const genConfig = (pkg = {}, env) => {
22
22
}
23
23
24
24
const findRule = ( config , lang ) => config . module . rules . find ( rule => {
25
- const test = rule . test . toString ( ) . replace ( / \\ / g, '' )
26
- return test . indexOf ( `${ lang } $` ) > - 1
25
+ return rule . test . test ( `.${ lang } ` )
27
26
} )
28
27
29
28
const findLoaders = ( config , lang ) => {
30
29
const rule = findRule ( config , lang )
30
+ if ( ! rule ) {
31
+ throw new Error ( `rule not found for ${ lang } ` )
32
+ }
31
33
return rule . use . map ( ( { loader } ) => loader . replace ( / - l o a d e r $ / , '' ) )
32
34
}
33
35
@@ -37,49 +39,21 @@ const findOptions = (config, lang, _loader) => {
37
39
return use . options
38
40
}
39
41
40
- const findUsesForVue = ( config , lang ) => {
41
- const vueOptions = findOptions ( config , 'vue' , 'vue' )
42
- return vueOptions . loaders [ lang ]
43
- }
44
-
45
- const findLoadersForVue = ( config , lang ) => {
46
- return findUsesForVue ( config , lang ) . map ( ( { loader } ) => loader . replace ( / - l o a d e r $ / , '' ) )
47
- }
48
-
49
- const findOptionsForVue = ( config , lang , _loader ) => {
50
- const uses = findUsesForVue ( config , lang )
51
- const use = uses . find ( ( { loader } ) => `${ _loader } -loader` === loader )
52
- return use . options
53
- }
54
-
55
- const expectedCssLoaderModulesOptions = {
56
- importLoaders : 1 ,
57
- localIdentName : `[name]_[local]__[hash:base64:5]` ,
58
- minimize : false ,
59
- sourceMap : false ,
60
- modules : true
61
- }
62
-
63
42
test ( 'default loaders' , ( ) => {
64
43
const config = genConfig ( { postcss : { } } )
65
44
66
45
LANGS . forEach ( lang => {
67
46
const loader = lang === 'css' ? [ ] : LOADERS [ lang ]
68
47
expect ( findLoaders ( config , lang ) ) . toEqual ( [ 'vue-style' , 'css' , 'postcss' ] . concat ( loader ) )
69
- // vue-loader loaders should not include postcss because it's built-in
70
- expect ( findLoadersForVue ( config , lang ) ) . toEqual ( [ 'vue-style' , 'css' ] . concat ( loader ) )
71
48
// assert css-loader options
72
49
expect ( findOptions ( config , lang , 'css' ) ) . toEqual ( {
73
50
minimize : false ,
74
- sourceMap : false
51
+ sourceMap : false ,
52
+ importLoaders : lang === 'css' ? 1 : 2
75
53
} )
76
- // files ending in .module.lang
77
- expect ( findOptions ( config , `module.${ lang } ` , 'css' ) ) . toEqual ( expectedCssLoaderModulesOptions )
78
54
} )
79
-
80
55
// sass indented syntax
81
56
expect ( findOptions ( config , 'sass' , 'sass' ) ) . toEqual ( { indentedSyntax : true , sourceMap : false } )
82
- expect ( findOptionsForVue ( config , 'sass' , 'sass' ) ) . toEqual ( { indentedSyntax : true , sourceMap : false } )
83
57
} )
84
58
85
59
test ( 'production defaults' , ( ) => {
@@ -88,10 +62,10 @@ test('production defaults', () => {
88
62
LANGS . forEach ( lang => {
89
63
const loader = lang === 'css' ? [ ] : LOADERS [ lang ]
90
64
expect ( findLoaders ( config , lang ) ) . toEqual ( [ extractLoaderPath , 'vue-style' , 'css' , 'postcss' ] . concat ( loader ) )
91
- expect ( findLoadersForVue ( config , lang ) ) . toEqual ( [ extractLoaderPath , 'vue-style' , 'css' ] . concat ( loader ) )
92
65
expect ( findOptions ( config , lang , 'css' ) ) . toEqual ( {
93
66
minimize : true ,
94
- sourceMap : false
67
+ sourceMap : false ,
68
+ importLoaders : lang === 'css' ? 1 : 2
95
69
} )
96
70
} )
97
71
} )
@@ -105,7 +79,13 @@ test('css.modules', () => {
105
79
}
106
80
} )
107
81
LANGS . forEach ( lang => {
108
- expect ( findOptions ( config , lang , 'css' ) ) . toEqual ( expectedCssLoaderModulesOptions )
82
+ expect ( findOptions ( config , lang , 'css' ) ) . toEqual ( {
83
+ importLoaders : lang === 'css' ? 0 : 1 , // no postcss-loader
84
+ localIdentName : `[name]_[local]_[hash:base64:5]` ,
85
+ minimize : false ,
86
+ sourceMap : false ,
87
+ modules : true
88
+ } )
109
89
} )
110
90
} )
111
91
@@ -120,7 +100,6 @@ test('css.extract', () => {
120
100
const extractLoaderPath = require . resolve ( 'extract-text-webpack-plugin/dist/loader' )
121
101
LANGS . forEach ( lang => {
122
102
expect ( findLoaders ( config , lang ) ) . not . toContain ( extractLoaderPath )
123
- expect ( findLoadersForVue ( config , lang ) ) . not . toContain ( extractLoaderPath )
124
103
} )
125
104
} )
126
105
@@ -137,8 +116,6 @@ test('css.sourceMap', () => {
137
116
expect ( findOptions ( config , lang , 'css' ) . sourceMap ) . toBe ( true )
138
117
expect ( findOptions ( config , lang , 'postcss' ) . sourceMap ) . toBe ( true )
139
118
expect ( findOptions ( config , lang , LOADERS [ lang ] ) . sourceMap ) . toBe ( true )
140
- expect ( findOptionsForVue ( config , lang , 'css' ) . sourceMap ) . toBe ( true )
141
- expect ( findOptionsForVue ( config , lang , LOADERS [ lang ] ) . sourceMap ) . toBe ( true )
142
119
} )
143
120
} )
144
121
@@ -172,9 +149,7 @@ test('css.loaderOptions', () => {
172
149
} )
173
150
174
151
expect ( findOptions ( config , 'scss' , 'sass' ) ) . toEqual ( { data, sourceMap : false } )
175
- expect ( findOptionsForVue ( config , 'scss' , 'sass' ) ) . toEqual ( { data, sourceMap : false } )
176
152
expect ( findOptions ( config , 'sass' , 'sass' ) ) . toEqual ( { data, indentedSyntax : true , sourceMap : false } )
177
- expect ( findOptionsForVue ( config , 'sass' , 'sass' ) ) . toEqual ( { data, indentedSyntax : true , sourceMap : false } )
178
153
} )
179
154
180
155
test ( 'skip postcss-loader if no postcss config found' , ( ) => {
0 commit comments