UNPKG

3.22 kBJavaScriptView Raw
1'use strict';
2
3function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
5var ExtractTextPlugin = _interopDefault(require('extract-text-webpack-plugin'));
6
7var HandleCSSLoader = function HandleCSSLoader(ref) {
8 if ( ref === void 0 ) ref = {};
9 var fallbackLoader = ref.fallbackLoader; if ( fallbackLoader === void 0 ) fallbackLoader = 'style-loader';
10 var cssLoader = ref.cssLoader; if ( cssLoader === void 0 ) cssLoader = 'css-loader';
11 var postcss = ref.postcss;
12 var sourceMap = ref.sourceMap;
13 var extract = ref.extract;
14 var minimize = ref.minimize;
15 var cssModules = ref.cssModules;
16
17 this.fallbackLoader = fallbackLoader;
18 this.cssLoader = cssLoader;
19 this.postcssOptions = postcss;
20 this.sourceMap = sourceMap;
21 this.extract = extract;
22 this.minimize = minimize;
23 this.cssModules = cssModules;
24};
25
26HandleCSSLoader.prototype.getLoader = function getLoader (test, loader, options) {
27 if ( options === void 0 ) options = {};
28
29 var cssLoaderOptions = {
30 autoprefixer: false,
31 sourceMap: this.sourceMap,
32 minimize: this.minimize
33 };
34
35 if (this.cssModules) {
36 cssLoaderOptions.modules = true;
37 cssLoaderOptions.importLoaders = 1;
38 cssLoaderOptions.localIdentName = '[name]_[local]__[hash:base64:5]';
39 }
40
41 if (loader === 'css-loader') {
42 Object.assign(cssLoaderOptions, options);
43 }
44
45 var use = [{
46 loader: this.cssLoader,
47 options: cssLoaderOptions
48 }];
49
50 if (loader !== 'postcss-loader' && this.postcssOptions !== false) {
51 var postcssOptions = {
52 sourceMap: this.sourceMap
53 };
54
55 if (Array.isArray(this.postcssOptions)) {
56 postcssOptions.plugins = this.postcssOptions;
57 } else if (typeof this.postcssOptions === 'object') {
58 Object.assign(postcssOptions, this.postcssOptions);
59 }
60
61 use.push({
62 loader: 'postcss-loader',
63 options: postcssOptions
64 });
65 }
66
67 if (loader && loader !== 'css-loader') {
68 use.push({
69 loader: loader,
70 options: Object.assign({}, options,
71 {sourceMap: this.sourceMap})
72 });
73 }
74
75 return {
76 test: test,
77 use: this.extract ? ExtractTextPlugin.extract({
78 use: use,
79 fallback: this.fallbackLoader
80 }) : [{
81 loader: this.fallbackLoader,
82 options: {
83 sourceMap: this.sourceMap
84 }
85 } ].concat( use)
86 }
87};
88
89HandleCSSLoader.prototype.css = function css (options) {
90 return this.getLoader(/\.css$/, 'css-loader', options)
91};
92
93HandleCSSLoader.prototype.sass = function sass (options) {
94 if ( options === void 0 ) options = {};
95
96 return this.getLoader(/\.sass$/, 'sass-loader', Object.assign({}, {indentedSyntax: true},
97 options))
98};
99
100HandleCSSLoader.prototype.scss = function scss (options) {
101 return this.getLoader(/\.scss$/, 'sass-loader', options)
102};
103
104HandleCSSLoader.prototype.less = function less (options) {
105 return this.getLoader(/\.less$/, 'less-loader', options)
106};
107
108HandleCSSLoader.prototype.stylus = function stylus (options) {
109 return this.getLoader(/\.stylus$/, 'stylus-loader', options)
110};
111
112HandleCSSLoader.prototype.styl = function styl (options) {
113 return this.getLoader(/\.styl$/, 'stylus-loader', options)
114};
115
116module.exports = HandleCSSLoader;