text: const ExtractTextPlugin = require('extract-text-webpack-plugin');
  const autoprefixer = require('autoprefixer');
  
  const cssLoaders = (options) => {
    options = options || {};
  
    const cssLoader = {
      loader: 'css-loader',
      options: {
        sourceMap: options.sourceMap,
        minimize: process.env.NODE_ENV === 'production',
      },
    };
  
    const postcssLoader = {
      loader: 'postcss-loader',
      options: {
        sourceMap: options.sourceMap,
        ident: 'postcss',
        plugins: () => [
          require('postcss-flexbugs-fixes'),
          autoprefixer({
            browsers: [
              '>1%',
              'last 4 versions',
              'Firefox ESR',
              'not ie < 9', // Doesn"t support IE8 anyway
            ],
            flexbox: 'no-2009',
          }),
        ],
      },
    };
  
    function generateLoaders(loader, loaderOptions) {
      const loaders = options.usePostCSS
        ? [cssLoader, postcssLoader]
        : [cssLoader];
  
      if (loader) {
        loaders.push({
          loader: `${loader}-loader`,
          options: Object.assign({}, loaderOptions, {
            sourceMap: options.sourceMap,
          }),
        });
      }
  
      // Extract CSS when that option is specified
      // (which is the case during production build)
      if (options.extract) {
        return ExtractTextPlugin.extract({
          use: loaders,
          fallback: 'style-loader',
        });
      } else {
        return ['style-loader'].concat(loaders);
      }
    }
  
    return {
      css: generateLoaders(),
      postcss: generateLoaders(),
      less: generateLoaders('less'),
      sass: generateLoaders('sass', { indentedSyntax: true }),
      scss: generateLoaders('sass'),
      stylus: generateLoaders('stylus'),
      styl: generateLoaders('stylus'),
    };
  };
  
  module.exports.styleLoaders = (options) => {
    const output = [];
    const loaders = cssLoaders(options);
  
    for (const extension in loaders) {
      if (Object.prototype.hasOwnProperty.call(loaders, extension)) {
        const loader = loaders[extension];
        output.push({
          test: new RegExp(`\\.${extension}$`),
          use: loader,
        });
      }
    }
    return output;
  };
  