From 1f0be12486d0d1897da881783d77d413d1ab489b Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 9 Feb 2021 16:38:25 +0100 Subject: [PATCH] Re-add ExtractTextPlugin --- client/build/webpack.base.conf.js | 70 ++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/client/build/webpack.base.conf.js b/client/build/webpack.base.conf.js index a2c932e6..fa8b0db2 100644 --- a/client/build/webpack.base.conf.js +++ b/client/build/webpack.base.conf.js @@ -5,11 +5,50 @@ const config = require('../config') const vueLoaderConfig = require('./vue-loader.conf') const VueLoaderPlugin = require('vue-loader/lib/plugin') +const ExtractTextPlugin = require("extract-text-webpack-plugin") function resolve(dir) { return path.join(__dirname, '..', dir) } +const styleRule = (scss) => { + const test = scss ? /\.scss$/ : /\.css$/; + let use; + if (scss) { + use = [ + 'css-loader', + { + loader: 'sass-loader', + options: { + data: process.env.THEME ? `@import "styles/themes/_${process.env.THEME}.scss";` : '' + } + } + ] + } else { + use = [ + 'css-loader' + ] + } + + if (process.env.NODE_ENV === 'production') { + return { + test, + loader: ExtractTextPlugin.extract({ + use, + fallback: 'vue-style-loader' + }) + } + } else { + return { + test, + use: [ + 'vue-style-loader', + ...use + ] + } + } +} + const createLintingRule = () => ({ test: /\.(js|vue)$/, loader: 'eslint-loader', @@ -95,26 +134,17 @@ module.exports = { name: utils.assetsPath('fonts/[name].[hash:7].[ext]') } }, - { - test: /\.css$/, - use: [ - 'vue-style-loader', - 'css-loader' - ] - }, - { - test: /\.scss$/, - use: [ - 'vue-style-loader', - 'css-loader', - { - loader: 'sass-loader', - options: { - data: process.env.THEME ? `@import "styles/themes/_${process.env.THEME}.scss";` : '' - } - } - ] - } + styleRule(false), // css rule + // { + // test: /\.css$/, + // use: [ + // process.env.NODE_ENV !== 'production' + // ? 'vue-style-loader' + // : MiniCssExtractPlugin.loader, + // 'css-loader' + // ] + // }, + styleRule(true) // sass rule ] }, plugins: [