1 | import ExtractTextPlugin from 'extract-text-webpack-plugin';
|
2 | import getTSCommonConfig from './get-ts-common-config';
|
3 | var tsQuery = getTSCommonConfig();
|
4 |
|
5 | function injectPostcssOptions(webpackConfig, args) {
|
6 | function extractCSS(_opts) {
|
7 | if (!args.dev) {
|
8 | return ExtractTextPlugin.extract({
|
9 | use: _opts,
|
10 | publicPath: '../'
|
11 | });
|
12 | }
|
13 |
|
14 | _opts.unshift('style-loader');
|
15 |
|
16 | return _opts;
|
17 | }
|
18 |
|
19 | var canCompress = args.compress && !args.dev && !args.watch;
|
20 | var postcssOptions = webpackConfig.options.postcss;
|
21 | var cssLoaderRule = {
|
22 | loader: 'css-loader',
|
23 | options: {
|
24 | sourceMap: true,
|
25 | minimize: canCompress
|
26 | }
|
27 | };
|
28 | var cssLoaderRule2 = {
|
29 | loader: 'css-loader',
|
30 | options: {
|
31 | sourceMap: true,
|
32 | modules: true,
|
33 | minimize: canCompress,
|
34 | localIdentName: '[local]___[hash:base62:5]'
|
35 | }
|
36 | };
|
37 | var postCSSRule = {
|
38 | loader: 'postcss-loader',
|
39 | options: postcssOptions
|
40 | };
|
41 | var lessLoaderRule = {
|
42 | loader: 'less-loader',
|
43 | options: {
|
44 | sourceMap: true
|
45 | }
|
46 | };
|
47 | webpackConfig.module.rules.push({
|
48 | enforce: 'post',
|
49 | test: function test(filePath) {
|
50 | return /\.css$/.test(filePath) && !/\.module\.css$/.test(filePath);
|
51 | },
|
52 | use: extractCSS([cssLoaderRule, postCSSRule])
|
53 | }, {
|
54 | test: /\.module\.css$/,
|
55 | use: extractCSS([cssLoaderRule2, postCSSRule])
|
56 | }, {
|
57 | test: function test(filePath) {
|
58 | return /\.less$/.test(filePath) && !/\.module\.less$/.test(filePath);
|
59 | },
|
60 | use: lessLoaderRule
|
61 | }, {
|
62 | enforce: 'post',
|
63 | test: function test(filePath) {
|
64 | return /\.less$/.test(filePath) && !/\.module\.less$/.test(filePath);
|
65 | },
|
66 | use: extractCSS([cssLoaderRule, postCSSRule])
|
67 | }, {
|
68 | test: /\.module\.less$/,
|
69 | use: extractCSS([cssLoaderRule2, postCSSRule, lessLoaderRule])
|
70 | });
|
71 | }
|
72 |
|
73 | function injectBabelOptions(webpackConfig) {
|
74 | var babelOptions = webpackConfig.options.babel;
|
75 | webpackConfig.module.rules.push({
|
76 | test: /\.jsx?$/,
|
77 | exclude: /node_modules/,
|
78 | loader: 'babel-loader',
|
79 | options: babelOptions
|
80 | }, {
|
81 | test: /\.tsx?$/,
|
82 | use: [{
|
83 | loader: 'babel-loader',
|
84 | options: babelOptions
|
85 | }, {
|
86 | loader: 'ts-loader',
|
87 | options: {
|
88 | transpileOnly: true,
|
89 | compilerOptions: tsQuery
|
90 | }
|
91 | }]
|
92 | });
|
93 | }
|
94 |
|
95 | function injectVueTplOptions(webpackConfig, args) {
|
96 | var canCompress = args.compress && !args.dev && !args.watch;
|
97 | var postcssOptions = webpackConfig.options.postcss;
|
98 | var babelOptions = webpackConfig.options.babel;
|
99 | webpackConfig.module.rules.push({
|
100 | test: /\.vue.tpl$/,
|
101 | loader: 'vue-tpl-loader',
|
102 | options: {
|
103 | transformToRequire: {
|
104 | img: 'src'
|
105 | }
|
106 | }
|
107 | });
|
108 | }
|
109 |
|
110 | export default function injectLoaderOptions(webpackConfig, args) {
|
111 | injectPostcssOptions(webpackConfig, args);
|
112 | injectBabelOptions(webpackConfig);
|
113 | injectVueTplOptions(webpackConfig, args);
|
114 | delete webpackConfig.options;
|
115 | } |
\ | No newline at end of file |