webpack.base.js 1.78 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: 'qx-[name]-[contenthash].bundle.js',
    libraryTarget: 'umd',
    clean: true,
  },
  entry: path.resolve(cwd, './src/index.tsx'),
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react'],
          },
        },
      },
      {
        test: /\.(ts|tsx)$/,
        use: {
          loader: 'ts-loader',
        },
      },
      {
        test: /\.(png|jpeg|jpg|ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/,
        use: {
          loader: 'file-loader',
        },
      },
      {
        test: /\.less$/i,
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'less-loader',
            options: {
              additionalData: `@import '@qx/ui/dist/src/style/variable.less';`,
            },
          },
        ],
      },
      {
        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',
        },
      ],
    }),
  ],
};