const path = require('path'); const ProgressBarWebpackPlugin = require('progress-bar-webpack-plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const resolve = (url) => path.resolve(__dirname, '..', url); module.exports = { mode: 'development', devtool: 'source-map', target: 'node', entry: { server: resolve("src/server.ts"), }, plugins: [ new ESLintPlugin({ overrideConfigFile: resolve(".eslintrc.js"), context: resolve("src"), extensions: ['ts', 'js'], fix: true, }), new ProgressBarWebpackPlugin(), ], module: { rules: [ { test: /\.tsx?$/, use: [ { loader: 'babel-loader', options: { cacheDirectory: true, }, }, { loader: 'ts-loader', }, ], }, { test: /\.css$/, use: [ { loader: MiniCssExtractPlugin.loader, options: { publicPath: '../', }, }, { loader: 'css-loader', }, ], }, { test: /\.less$/, use: [ { loader: MiniCssExtractPlugin.loader, options: { publicPath: '../', }, }, { loader: 'css-loader', }, { loader: 'less-loader', }, ], }, { test: /\.(png|svg|jpe?g|gif)$/i, use: [ { loader: 'url-loader', options: { limit: 18192, outputPath: 'img', name: '[name].[ext]?[hash]', esModule: false, }, }, ], }, { test: /\.(woff|woff2|eot|ttf|otf)$/i, use: [ { loader: 'file-loader', options: { outputPath: 'font', esModule: false, }, }, ], }, { test: /\.wasm$/, type: 'webassembly/async', }, ], }, resolve: { extensions: ['.ts', '.tsx', '.js', '.json'], alias: { '@': resolve('src'), }, }, experiments: { syncWebAssembly: true, asyncWebAssembly: true, topLevelAwait: true, }, externals: [/node_modules/, 'bufferutil', 'utf-8-validate'], output: { filename: 'js/[name].js', library: 'Node', libraryTarget: 'umd', }, };