| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import path from 'path'
- import dotenv from 'dotenv'
- dotenv.config({
- path: `.env.${process.env.NODE_ENV}`,
- });
- import antdThemeOverrides from '../src/AntdTheme'
- import { getThemeVariables } from 'antd/dist/theme'
- export default ({ config }) => {
- // Transpile Gatsby module because Gatsby includes un-transpiled ES6 code.
- // ========================================================
- config.module.rules[0].exclude = [/node_modules\/(?!(gatsby)\/)/];
- // Add Babel rules
- // ========================================================
- // use installed babel-loader which is v8.0-beta (which is meant to work with @babel/core@7)
- config.module.rules[0].use[0].loader = require.resolve('babel-loader');
- // use @babel/preset-react for JSX and env (instead of staged presets)
- config.module.rules[0].use[0].options.presets = [
- require.resolve('@babel/preset-react'),
- require.resolve('@babel/preset-env'),
- // Emotion preset must run BEFORE reacts preset to properly convert css-prop.
- // Babel preset-ordering runs reversed (from last to first). Emotion has to be after React preset.
- ];
- config.module.rules[0].use[0].options.plugins = [
- // use @babel/plugin-proposal-class-properties for class arrow functions
- require.resolve('@babel/plugin-proposal-class-properties'),
- // use babel-plugin-remove-graphql-queries to remove static queries from components when rendering in storybook
- require.resolve('babel-plugin-remove-graphql-queries'),
- ];
- // Prefer Gatsby ES6 entrypoint (module) over commonjs (main) entrypoint
- // ========================================================
- config.resolve.mainFields = ['browser', 'module', 'main'];
- // Add Webpack rules for TypeScript
- // ========================================================
- config.module.rules.push({
- test: /\.(ts|tsx)$/,
- loader: require.resolve('babel-loader'),
- options: {
- presets: [
- ['react-app', { flow: false, typescript: true }],
- // Emotion preset must run BEFORE reacts preset to properly convert css-prop.
- // Babel preset-ordering runs reversed (from last to first). Emotion has to be after React preset.
- ],
- plugins: [
- require.resolve('@babel/plugin-proposal-class-properties'),
- // use babel-plugin-remove-graphql-queries to remove static queries from components when rendering in storybook
- require.resolve('babel-plugin-remove-graphql-queries'),
- ['import', {libraryName: "antd", libraryDirectory: 'es', style: true}]
- ],
- },
- });
- config.module.rules.push({
- test: /\.less$/,
- loaders: [
- "style-loader",
- "css-loader",
- {
- loader: "less-loader",
- options: {
- lessOptions: {
- javascriptEnabled: true,
- modifyVars: {
- ...getThemeVariables({
- dark: true, // Enable dark mode
- compact: true, // Enable compact mode,
- }),
- ...antdThemeOverrides,
- }
- }
- }
- }
- ],
- include: path.resolve(__dirname, "../")
- })
- config.resolve.extensions.push('.ts', '.tsx');
- // Add SVGR Loader
- // ========================================================
- // Remove svg rules from existing webpack rule
- const assetRule = config.module.rules.find(({ test }) => test.test('.svg'));
- const assetLoader = {
- loader: assetRule.loader,
- options: assetRule.options || assetRule.query,
- };
- config.module.rules.unshift({
- test: /\.svg$/,
- use: ['@svgr/webpack', assetLoader],
- });
- // Mirror project aliases for some reason (should be picked up by .babelrc)
- // ========================================================
- config.resolve.alias['~/utils'] = path.resolve(__dirname, '../src/utils');
- config.resolve.alias['~/components'] = path.resolve(
- __dirname,
- '../src/components'
- );
- config.resolve.alias['~/images'] = path.resolve(__dirname, '../src/images');
- config.resolve.alias['~/icons'] = path.resolve(__dirname, '../src/icons');
- return config;
- };
|