module.exports = { type: 'react-app', babel: { loose: false, presets: [ 'babel-preset-env', ], plugins: [ 'babel-plugin-transform-class-properties', ], }, webpack: { aliases: { 'moment-timezone': 'moment-timezone/builds/moment-timezone-with-data-2012-2022.js', }, autoprefixer: '> 1%, last 2 versions, Firefox ESR, ios >= 8', config(config) { // Change config as you wish // Select rules that match stylesheet files const matchingLoaders = [ 'sass-loader', ].map(require.resolve); const newConfig = Object.assign({}, config); newConfig.module.rules = config.module.rules.map((rule) => { let enableSourceMap = false; if (!rule.use) { return rule; } return Object.assign({}, rule, { use: rule.use.reduce((result, loaderDescriptor) => { const resolvedLoader = require.resolve(loaderDescriptor.loader); // Make sure resolve-url-loader is inserted right before compatible loaders if (matchingLoaders.indexOf(resolvedLoader) >= 0) { result.push({ loader: require.resolve('resolve-url-loader'), options: { fail: true, silent: false, }, }); enableSourceMap = true; } const finalLoaderDescriptor = Object.assign({}, loaderDescriptor); // Avoid PostCSS discarding all source map information if (enableSourceMap || resolvedLoader === require.resolve('postcss-loader')) { finalLoaderDescriptor.options = finalLoaderDescriptor.options || {}; finalLoaderDescriptor.options.sourceMap = true; } result.push(finalLoaderDescriptor); return result; }, []), }); }); return newConfig; }, extra: { resolve: { extensions: [ '.jsx', ], }, }, publicPath: '', rules: { babel: { test: /\.jsx?/, }, 'sass-css': { modules: true, localIdentName: '[name]__[local]__[hash:base64:5]', }, }, }, }; // @HACK - workaround for https://github.com/webpack/webpack/issues/1866 function batchresolve(arr) { return arr.map(require.resolve); } module.exports.babel.presets = batchresolve(module.exports.babel.presets); module.exports.babel.plugins = batchresolve(module.exports.babel.plugins);