rspack.build.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const { rspack } = require('@rspack/core');
  2. const path = require('path');
  3. const { merge } = require('webpack-merge');
  4. const common = require('../rspack/rspack.common.js');
  5. const plugins = [
  6. new rspack.CssExtractRspackPlugin({
  7. filename: '../dist/converse.min.css',
  8. }),
  9. new rspack.CssExtractRspackPlugin({
  10. filename: '../dist/converse.css',
  11. }),
  12. new rspack.CopyRspackPlugin({
  13. patterns: [
  14. { from: 'node_modules/strophe.js/src/shared-connection-worker.js', to: 'shared-connection-worker.js' },
  15. { from: 'sounds', to: 'sounds' },
  16. { from: 'images/favicon.ico', to: 'images/favicon.ico' },
  17. { from: 'images/custom_emojis', to: 'images/custom_emojis' },
  18. { from: 'logo/conversejs-filled-192.png', to: 'images/logo' },
  19. { from: 'logo/conversejs-filled-512.png', to: 'images/logo' },
  20. { from: 'logo/conversejs-filled-192.svg', to: 'images/logo' },
  21. { from: 'logo/conversejs-filled-512.svg', to: 'images/logo' },
  22. { from: 'logo/conversejs-filled.svg', to: 'images/logo' },
  23. { from: 'logo/conversejs-gold-gradient.svg', to: 'images/logo' },
  24. { from: 'src/shared/styles/webfonts', to: 'webfonts' },
  25. { from: 'manifest.json', to: 'manifest.json' },
  26. ],
  27. }),
  28. ];
  29. module.exports = merge(common, {
  30. plugins,
  31. entry: {
  32. 'converse': path.resolve(__dirname, '../src/entry.js'),
  33. 'converse.min': path.resolve(__dirname, '../src/entry.js'),
  34. },
  35. output: {
  36. filename: '[name].js',
  37. },
  38. mode: 'production',
  39. optimization: {
  40. minimize: true,
  41. minimizer: [
  42. new rspack.SwcJsMinimizerRspackPlugin({
  43. minimizerOptions: {
  44. minify: true,
  45. mangle: true,
  46. compress: {
  47. passes: 2,
  48. },
  49. format: {
  50. comments: false,
  51. },
  52. },
  53. }),
  54. new rspack.LightningCssMinimizerRspackPlugin(),
  55. ],
  56. },
  57. module: {
  58. rules: [
  59. {
  60. test: /\.(js|ts)$/,
  61. use: [
  62. {
  63. loader: 'minify-html-literals-loader',
  64. },
  65. ],
  66. },
  67. {
  68. test: /\.scss$/,
  69. use: [
  70. rspack.CssExtractRspackPlugin.loader,
  71. {
  72. loader: 'css-loader',
  73. options: {
  74. url: false,
  75. sourceMap: true,
  76. },
  77. },
  78. {
  79. loader: 'postcss-loader',
  80. options: { sourceMap: true },
  81. },
  82. {
  83. loader: 'sass-loader',
  84. options: {
  85. sassOptions: {
  86. silenceDeprecations: ['color-functions', 'global-builtin', 'import', 'mixed-decls'],
  87. includePaths: [
  88. path.resolve(__dirname, '../node_modules/'),
  89. path.resolve(__dirname, '../src/'),
  90. ],
  91. },
  92. sourceMap: true,
  93. },
  94. },
  95. ],
  96. },
  97. ],
  98. },
  99. });