diff --git a/lib/builder/webpack/base.js b/lib/builder/webpack/base.js index 7da5ca788d..968b753840 100644 --- a/lib/builder/webpack/base.js +++ b/lib/builder/webpack/base.js @@ -136,26 +136,26 @@ export default class WebpackBaseConfig { }, { test: /\.css$/, - use: perfLoader.pool('css', styleLoader.apply('css')) + oneOf: perfLoader.poolOneOf('css', styleLoader.apply('css')) }, { test: /\.less$/, - use: perfLoader.pool('css', styleLoader.apply('less', 'less-loader')) + oneOf: perfLoader.poolOneOf('css', styleLoader.apply('less', 'less-loader')) }, { test: /\.sass$/, - use: perfLoader.pool('css', styleLoader.apply('sass', { + oneOf: perfLoader.poolOneOf('css', styleLoader.apply('sass', { loader: 'sass-loader', options: { indentedSyntax: true } })) }, { test: /\.scss$/, - use: perfLoader.pool('css', styleLoader.apply('scss', 'sass-loader')) + oneOf: perfLoader.poolOneOf('css', styleLoader.apply('scss', 'sass-loader')) }, { test: /\.styl(us)?$/, - use: perfLoader.pool('css', styleLoader.apply('stylus', 'stylus-loader')) + oneOf: perfLoader.poolOneOf('css', styleLoader.apply('stylus', 'stylus-loader')) }, { test: /\.(png|jpe?g|gif|svg)$/, diff --git a/lib/builder/webpack/utils/perf-loader.js b/lib/builder/webpack/utils/perf-loader.js index 20c5db4533..6c3de2242c 100644 --- a/lib/builder/webpack/utils/perf-loader.js +++ b/lib/builder/webpack/utils/perf-loader.js @@ -53,4 +53,10 @@ export default class PerfLoader { return loaders } + + poolOneOf(poolName, oneOfRules) { + return oneOfRules.map(rule => Object.assign({}, rule, { + use: this.pool(poolName, rule.use) + })) + } } diff --git a/lib/builder/webpack/utils/style-loader.js b/lib/builder/webpack/utils/style-loader.js index 05d32869b6..8c6be8a00a 100644 --- a/lib/builder/webpack/utils/style-loader.js +++ b/lib/builder/webpack/utils/style-loader.js @@ -61,7 +61,7 @@ export default class StyleLoader { } } - css(importLoaders) { + css(importLoaders, options) { // css-loader // https://github.com/webpack-contrib/css-loader const cssLoaderAlias = { @@ -71,12 +71,12 @@ export default class StyleLoader { return { loader: (this.isServer && this.extractCSS) ? 'css-loader/locals' : 'css-loader', - options: { + options: Object.assign({ sourceMap: this.sourceMap, minimize: !this.dev, importLoaders: importLoaders, alias: cssLoaderAlias - } + }, options) } } @@ -95,16 +95,35 @@ export default class StyleLoader { } apply(ext, loaders = []) { - const _customLoaders = [].concat( + const customLoaders = [].concat( this.postcss(loaders), this.styleResource(ext), this.normalize(loaders) ).filter(Boolean) - return [].concat( - this.extract() || this.vueStyle(), - this.css(_customLoaders.length), - _customLoaders - ).filter(Boolean) + const styleLoader = this.extract() || this.vueStyle() + + return [ + // This matches + +