UNPKG

3.21 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = injectLoaderOptions;
7
8var _extractTextWebpackPlugin = _interopRequireDefault(require("extract-text-webpack-plugin"));
9
10var _getTsCommonConfig = _interopRequireDefault(require("./get-ts-common-config"));
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14var tsQuery = (0, _getTsCommonConfig.default)();
15
16function 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
84function 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
106function 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
121function 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