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