webpack.base.js 1.5 KB
const CopyPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const process = require('process');
const path = require('path');

const cwd = process.cwd();

module.exports = {
  output: {
    filename: 'index.js',
    libraryTarget: 'umd',
  },
  entry: path.resolve(cwd, './src/index.tsx'),
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react'],
          },
        },
      },
      {
        test: /\.(ts|tsx)$/,
        use: {
          loader: 'ts-loader',
        },
      },
      {
        test: /\.(ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/,
        use: {
          loader: 'file-loader',
        },
      },
      {
        test: /\.less$/i,
        use: ['style-loader', 'css-loader', 'less-loader'],
      },
      {
        test: /\.svg$/,
        use: ['@svgr/webpack', 'url-loader'],
      },
    ],
  },
  // externals: {
  //   react: 'React',
  //   'react-dom': 'ReactDOM',
  // },
  resolve: {
    extensions: ['.json', '.jsx', '.js', '.ts', '.tsx'],
    alias: {
      '@': path.resolve(cwd, './src/'),
      '@/src': path.resolve(cwd, './src/'),
    },
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(cwd, './src/public/index.html'),
    }),
    new CopyPlugin({
      patterns: [
        {
          from: path.resolve(cwd, './src/public'),
          to: 'public',
        },
      ],
    }),
  ],
};