|
|
const path = require('path'); |
|
|
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); |
|
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin'); |
|
|
|
|
|
module.exports = { |
|
|
entry: { |
|
|
start: './ts/start.ts', |
|
|
compare: './ts/compare.ts' |
|
|
}, |
|
|
module: { |
|
|
rules: [ |
|
|
{ |
|
|
test: /\.tsx?$/, |
|
|
exclude: /node_modules/, |
|
|
use: { |
|
|
loader: 'ts-loader', |
|
|
options: { |
|
|
transpileOnly: true |
|
|
} |
|
|
} |
|
|
}, |
|
|
{ |
|
|
test: /\.s?css$/, |
|
|
use: [ |
|
|
MiniCssExtractPlugin.loader, |
|
|
{ |
|
|
loader: 'css-loader', |
|
|
options: { |
|
|
sourceMap: true |
|
|
} |
|
|
}, |
|
|
{ |
|
|
loader: 'sass-loader', |
|
|
options: { |
|
|
sourceMap: true, |
|
|
api: 'modern' |
|
|
} |
|
|
} |
|
|
] |
|
|
}, |
|
|
{ |
|
|
test: /\.(png|jpg)$/, |
|
|
type: 'asset', |
|
|
parser: { |
|
|
dataUrlCondition: { |
|
|
maxSize: 20000 |
|
|
} |
|
|
} |
|
|
}, |
|
|
{ |
|
|
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, |
|
|
type: 'asset', |
|
|
parser: { |
|
|
dataUrlCondition: { |
|
|
maxSize: 20000 |
|
|
} |
|
|
}, |
|
|
generator: { |
|
|
dataUrl: { |
|
|
mimetype: 'application/font-woff' |
|
|
} |
|
|
} |
|
|
}, |
|
|
{ |
|
|
test: /\.svg(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, |
|
|
type: 'asset', |
|
|
parser: { |
|
|
dataUrlCondition: { |
|
|
maxSize: 10000 |
|
|
} |
|
|
}, |
|
|
generator: { |
|
|
dataUrl: { |
|
|
mimetype: 'image/svg+xml' |
|
|
} |
|
|
} |
|
|
}, |
|
|
{ |
|
|
test: /\.(ttf|eot)(\?v=[0-9]\.[0-9]\.[0-9])?$/, |
|
|
type: 'asset/resource' |
|
|
}, |
|
|
{ |
|
|
test: /\.html$/, |
|
|
exclude: /index\.html|compare\.html/, |
|
|
type: 'asset/source' |
|
|
} |
|
|
] |
|
|
}, |
|
|
resolve: { |
|
|
extensions: ['.ts', '.js'] |
|
|
}, |
|
|
plugins: [ |
|
|
new MiniCssExtractPlugin({ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}), |
|
|
new ForkTsCheckerWebpackPlugin({ |
|
|
typescript: { |
|
|
diagnosticOptions: { |
|
|
semantic: true, |
|
|
syntactic: true, |
|
|
}, |
|
|
memoryLimit: 4096 |
|
|
}, |
|
|
}), |
|
|
new CopyWebpackPlugin({ |
|
|
patterns: [ |
|
|
|
|
|
|
|
|
{ from: 'index.html', to: 'index.html' }, |
|
|
{ from: 'compare.html', to: 'compare.html' } |
|
|
] |
|
|
}), |
|
|
], |
|
|
optimization: { |
|
|
splitChunks: { |
|
|
cacheGroups: { |
|
|
vendor: { |
|
|
test: /node_modules/, |
|
|
chunks: "initial", |
|
|
name: "vendor", |
|
|
priority: 10, |
|
|
enforce: true |
|
|
} |
|
|
} |
|
|
} |
|
|
}, |
|
|
output: { |
|
|
filename: '[name].js', |
|
|
path: path.resolve(__dirname, '../dist/'), |
|
|
clean: true |
|
|
}, |
|
|
performance: { |
|
|
hints: false, |
|
|
maxEntrypointSize: 512000, |
|
|
maxAssetSize: 512000 |
|
|
}, |
|
|
devServer: { |
|
|
port: 8090, |
|
|
proxy: { |
|
|
'/api': { |
|
|
target: 'http://localhost:5001', |
|
|
secure: false, |
|
|
ws: true |
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
|