Advertisement
Guest User

Untitled

a guest
Jul 15th, 2022
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { addAfterLoader, removeLoaders, loaderByName, getLoaders, throwUnexpectedConfigError } = require('@craco/craco');
  2. const { ESBuildMinifyPlugin } = require('esbuild-loader');
  3.  
  4. const throwError = (message) =>
  5.     throwUnexpectedConfigError({
  6.         packageName: 'craco',
  7.         githubRepo: 'gsoft-inc/craco',
  8.         message,
  9.         githubIssueQuery: 'webpack',
  10.     });
  11.  
  12. module.exports = {
  13.     webpack: {
  14.         configure: (webpackConfig, { paths }) => {
  15.             const { hasFoundAny, matches } = getLoaders(webpackConfig, loaderByName('babel-loader'));
  16.             if (!hasFoundAny) throwError('failed to find babel-loader');
  17.  
  18.             console.log('removing babel-loader');
  19.             const { hasRemovedAny, removedCount } = removeLoaders(webpackConfig, loaderByName('babel-loader'));
  20.             if (!hasRemovedAny) throwError('no babel-loader to remove');
  21.             if (removedCount !== 2) throwError('had expected to remove 2 babel loader instances');
  22.  
  23.             console.log('adding esbuild-loader');
  24.  
  25.             const tsLoader = {
  26.                 test: /\.(js|mjs|jsx|ts|tsx)$/,
  27.                 include: paths.appSrc,
  28.                 loader: require.resolve('esbuild-loader'),
  29.                 options: {
  30.                   loader: 'tsx',
  31.                   target: 'es2015'
  32.                 },
  33.             };
  34.  
  35.             const { isAdded: tsLoaderIsAdded } = addAfterLoader(webpackConfig, loaderByName('url-loader'), tsLoader);
  36.             if (!tsLoaderIsAdded) throwError('failed to add esbuild-loader');
  37.             console.log('added esbuild-loader');
  38.  
  39.             console.log('adding non-application JS babel-loader back');
  40.             const { isAdded: babelLoaderIsAdded } = addAfterLoader(
  41.                 webpackConfig,
  42.                 loaderByName('esbuild-loader'),
  43.                 matches[1].loader // babel-loader
  44.             );
  45.             if (!babelLoaderIsAdded) throwError('failed to add back babel-loader for non-application JS');
  46.             console.log('added non-application JS babel-loader back');
  47.  
  48.             console.log('replacing TerserPlugin with ESBuildMinifyPlugin');
  49.             webpackConfig.optimization.minimizer = [
  50.                 new ESBuildMinifyPlugin({
  51.                     target: 'es2015'
  52.                 })
  53.             ];
  54.  
  55.             return webpackConfig;
  56.         },
  57.     },
  58. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement