From 171d0b8673b0fa22392ad3f1268a34e6d6768547 Mon Sep 17 00:00:00 2001 From: lawvs <18554747+lawvs@users.noreply.github.com> Date: Mon, 1 Aug 2022 11:09:20 +0800 Subject: [PATCH] feat: add @emotion/babel-plugin --- apps/ligo-virgo/webpack.config.js | 58 +++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/apps/ligo-virgo/webpack.config.js b/apps/ligo-virgo/webpack.config.js index c147f3e14b..edb5305b2b 100644 --- a/apps/ligo-virgo/webpack.config.js +++ b/apps/ligo-virgo/webpack.config.js @@ -151,6 +151,8 @@ module.exports = function (webpackConfig) { } } + addEmotionBabelPlugin(config); + config.plugins = [ ...config.plugins.filter( p => !(isProd && p instanceof MiniCssExtractPlugin) @@ -195,3 +197,59 @@ module.exports = function (webpackConfig) { return config; }; + +// TODO handle nx issue +// see https://github.com/nrwl/nx/issues/8870 +// see https://github.com/nrwl/nx/issues/4520#issuecomment-787473383 +const addEmotionBabelPlugin = config => { + const babelLoader = config.module.rules.find( + rule => + typeof rule !== 'string' && + rule.loader?.toString().includes('babel-loader') + ); + if (!babelLoader) { + return; + } + + babelLoader.options.plugins = [ + [ + require.resolve('@emotion/babel-plugin'), + { + // See https://github.com/mui/material-ui/issues/27380#issuecomment-928973157 + // See https://github.com/emotion-js/emotion/tree/main/packages/babel-plugin#importmap + importMap: { + '@toeverything/components/ui': { + styled: { + canonicalImport: ['@emotion/styled', 'default'], + styledBaseImport: [ + '@toeverything/components/ui', + 'styled', + ], + }, + }, + '@mui/material': { + styled: { + canonicalImport: ['@emotion/styled', 'default'], + styledBaseImport: ['@mui/material', 'styled'], + }, + }, + '@mui/material/styles': { + styled: { + canonicalImport: ['@emotion/styled', 'default'], + styledBaseImport: [ + '@mui/material/styles', + 'styled', + ], + }, + }, + }, + // sourceMap is on by default but source maps are dead code eliminated in production + sourceMap: true, + autoLabel: 'dev-only', + labelFormat: '[filename]-[local]', + cssPropOptimization: true, + }, + ], + ...(babelLoader.options.plugins ?? []), + ]; +};