UNPKG

2.91 kBJavaScriptView Raw
1import ExtractTextPlugin from 'extract-text-webpack-plugin';
2import getTSCommonConfig from './get-ts-common-config';
3var tsQuery = getTSCommonConfig();
4
5function 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
73function 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
95function 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
110export 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