Skip to content

Commit 1509f94

Browse files
committed
update:css theme extract
1 parent e48aed9 commit 1509f94

File tree

6 files changed

+48
-8
lines changed

6 files changed

+48
-8
lines changed

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import ReactDOM from 'react-dom';
33

44
// style
55
import './less/index.less';
6+
import './less/themes/green.less';
7+
import './less/themes/red.less';
8+
import './less/themes/yellow.less';
69

710
import App from './App';
811

src/less/index.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@base-color: #03a9f4;
2+
3+
body {
4+
background-color: @base-color;
5+
}

src/less/themes/green.less

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "../index";
2+
3+
@base-color: #4caf50;

src/less/themes/red.less

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "../index";
2+
3+
@base-color: #F44336;

src/less/themes/yellow.less

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "../index";
2+
3+
@base-color: #ffeb3b;

webpack.config.js

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,36 @@
11
const path = require('path');
2+
const fs = require('fs');
23
const webpack = require('webpack');
34
const ExtractTextPlugin = require('extract-text-webpack-plugin');
45
const HtmlwebpackPlugin = require('html-webpack-plugin');
56

67
const { STYLE_DEBUG } = process.env;
8+
// 主题路径
9+
const THEME_PATH = './src/less/themes';
710

811
const extractLess = new ExtractTextPlugin('style.[hash].css');
912

13+
const styleLoaders = [{ loader: 'css-loader' }, { loader: 'less-loader' }];
14+
15+
const resolveToThemeStaticPath = fileName => path.resolve(THEME_PATH, fileName);
16+
const themeFileNameSet = fs.readdirSync(path.resolve(THEME_PATH));
17+
const themePaths = themeFileNameSet.map(resolveToThemeStaticPath);
18+
const getThemeName = fileName => `theme-${path.basename(fileName, path.extname(fileName))}`;
19+
20+
// 全部 ExtractLessS 的集合
21+
const themesExtractLessSet = themeFileNameSet.map(fileName => new ExtractTextPlugin(`${getThemeName(fileName)}.css`))
22+
// 主题 Loader 的集合
23+
const themeLoaderSet = themeFileNameSet.map((fileName, index) => {
24+
return {
25+
test: /\.(less|css)$/,
26+
include: resolveToThemeStaticPath(fileName),
27+
loader: themesExtractLessSet[index].extract({
28+
use: styleLoaders
29+
})
30+
}
31+
});
32+
33+
1034
module.exports = {
1135
devServer: {
1236
contentBase: path.join(__dirname, 'public'),
@@ -36,14 +60,9 @@ module.exports = {
3660
},
3761
{
3862
test: /\.(less|css)$/,
63+
exclude: themePaths,
3964
loader: extractLess.extract({
40-
use: [
41-
{
42-
loader: 'css-loader',
43-
}, {
44-
loader: 'less-loader'
45-
}
46-
],
65+
use: styleLoaders,
4766
// use style-loader in development
4867
fallback: 'style-loader?{attrs:{prop: "value"}}'
4968
})
@@ -55,11 +74,15 @@ module.exports = {
5574
loader: 'html-loader'
5675
}
5776
]
58-
}
77+
},
78+
// 将Loader 的集合,加入 rules
79+
...themeLoaderSet
5980
]
6081
},
6182
plugins: [
6283
extractLess,
84+
// 将所有的 themesExtractLess 加入 plugin
85+
...themesExtractLessSet,
6386
new webpack.NamedModulesPlugin(),
6487
new HtmlwebpackPlugin({
6588
title: 'webpack 多主题打包演示',

0 commit comments

Comments
 (0)