106 lines
2.6 KiB
JavaScript
106 lines
2.6 KiB
JavaScript
const { ContextReplacementPlugin } = require('webpack');
|
|
|
|
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 4 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: {
|
|
plugins: [
|
|
new ContextReplacementPlugin(/moment[/\\]locale$/, /en\.js/),
|
|
],
|
|
|
|
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);
|
|
|