webpack.server.config.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. const path = require('path');
  2. const ProgressBarWebpackPlugin = require('progress-bar-webpack-plugin');
  3. const ESLintPlugin = require('eslint-webpack-plugin');
  4. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
  5. const resolve = (url) => path.resolve(__dirname, '..', url);
  6. module.exports = {
  7. mode: 'development',
  8. devtool: 'source-map',
  9. target: 'node',
  10. entry: {
  11. server: resolve("src/server.ts"),
  12. },
  13. plugins: [
  14. new ESLintPlugin({
  15. overrideConfigFile: resolve(".eslintrc.js"),
  16. context: resolve("src"),
  17. extensions: ['ts', 'js'],
  18. fix: true,
  19. }),
  20. new ProgressBarWebpackPlugin(),
  21. ],
  22. module: {
  23. rules: [
  24. {
  25. test: /\.tsx?$/,
  26. use: [
  27. {
  28. loader: 'babel-loader',
  29. options: {
  30. cacheDirectory: true,
  31. },
  32. },
  33. {
  34. loader: 'ts-loader',
  35. },
  36. ],
  37. },
  38. {
  39. test: /\.css$/,
  40. use: [
  41. {
  42. loader: MiniCssExtractPlugin.loader,
  43. options: {
  44. publicPath: '../',
  45. },
  46. },
  47. {
  48. loader: 'css-loader',
  49. },
  50. ],
  51. },
  52. {
  53. test: /\.less$/,
  54. use: [
  55. {
  56. loader: MiniCssExtractPlugin.loader,
  57. options: {
  58. publicPath: '../',
  59. },
  60. },
  61. {
  62. loader: 'css-loader',
  63. },
  64. {
  65. loader: 'less-loader',
  66. },
  67. ],
  68. },
  69. {
  70. test: /\.(png|svg|jpe?g|gif)$/i,
  71. use: [
  72. {
  73. loader: 'url-loader',
  74. options: {
  75. limit: 18192,
  76. outputPath: 'img',
  77. name: '[name].[ext]?[hash]',
  78. esModule: false,
  79. },
  80. },
  81. ],
  82. },
  83. {
  84. test: /\.(woff|woff2|eot|ttf|otf)$/i,
  85. use: [
  86. {
  87. loader: 'file-loader',
  88. options: {
  89. outputPath: 'font',
  90. esModule: false,
  91. },
  92. },
  93. ],
  94. },
  95. {
  96. test: /\.wasm$/,
  97. type: 'webassembly/async',
  98. },
  99. ],
  100. },
  101. resolve: {
  102. extensions: ['.ts', '.tsx', '.js', '.json'],
  103. alias: {
  104. '@': resolve('src'),
  105. },
  106. },
  107. experiments: {
  108. syncWebAssembly: true,
  109. asyncWebAssembly: true,
  110. topLevelAwait: true,
  111. },
  112. externals: [/node_modules/, 'bufferutil', 'utf-8-validate'],
  113. output: {
  114. filename: 'js/[name].js',
  115. library: 'Node',
  116. libraryTarget: 'umd',
  117. },
  118. };