1
1
const path = require ( 'path' ) ;
2
+ const fs = require ( 'fs' ) ;
2
3
const webpack = require ( 'webpack' ) ;
3
4
const ExtractTextPlugin = require ( 'extract-text-webpack-plugin' ) ;
4
5
const HtmlwebpackPlugin = require ( 'html-webpack-plugin' ) ;
5
6
6
7
const { STYLE_DEBUG } = process . env ;
8
+ // 主题路径
9
+ const THEME_PATH = './src/less/themes' ;
7
10
8
11
const extractLess = new ExtractTextPlugin ( 'style.[hash].css' ) ;
9
12
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 : / \. ( l e s s | c s s ) $ / ,
26
+ include : resolveToThemeStaticPath ( fileName ) ,
27
+ loader : themesExtractLessSet [ index ] . extract ( {
28
+ use : styleLoaders
29
+ } )
30
+ }
31
+ } ) ;
32
+
33
+
10
34
module . exports = {
11
35
devServer : {
12
36
contentBase : path . join ( __dirname , 'public' ) ,
@@ -36,14 +60,9 @@ module.exports = {
36
60
} ,
37
61
{
38
62
test : / \. ( l e s s | c s s ) $ / ,
63
+ exclude : themePaths ,
39
64
loader : extractLess . extract ( {
40
- use : [
41
- {
42
- loader : 'css-loader' ,
43
- } , {
44
- loader : 'less-loader'
45
- }
46
- ] ,
65
+ use : styleLoaders ,
47
66
// use style-loader in development
48
67
fallback : 'style-loader?{attrs:{prop: "value"}}'
49
68
} )
@@ -55,11 +74,15 @@ module.exports = {
55
74
loader : 'html-loader'
56
75
}
57
76
]
58
- }
77
+ } ,
78
+ // 将Loader 的集合,加入 rules
79
+ ...themeLoaderSet
59
80
]
60
81
} ,
61
82
plugins : [
62
83
extractLess ,
84
+ // 将所有的 themesExtractLess 加入 plugin
85
+ ...themesExtractLessSet ,
63
86
new webpack . NamedModulesPlugin ( ) ,
64
87
new HtmlwebpackPlugin ( {
65
88
title : 'webpack 多主题打包演示' ,
0 commit comments