webpack.build.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /* global __dirname, module, process */
  2. const CircularDependencyPlugin = require('circular-dependency-plugin');
  3. const CopyWebpackPlugin = require('copy-webpack-plugin');
  4. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  5. const common = require("./webpack.common.js");
  6. const path = require('path');
  7. const { merge } = require("webpack-merge");
  8. const plugins = [
  9. new MiniCssExtractPlugin({filename: '../dist/converse.min.css'}),
  10. new MiniCssExtractPlugin({filename: '../dist/converse.css'}),
  11. new CopyWebpackPlugin({
  12. patterns: [
  13. {from: 'node_modules/strophe.js/src/shared-connection-worker.js', to: 'shared-connection-worker.js'},
  14. {from: 'sounds', to: 'sounds'},
  15. {from: 'images/favicon.ico', to: 'images/favicon.ico'},
  16. {from: 'images/custom_emojis', to: 'images/custom_emojis'},
  17. {from: 'logo/conversejs-filled-192.png', to: 'images/logo'},
  18. {from: 'logo/conversejs-filled-512.png', to: 'images/logo'},
  19. {from: 'logo/conversejs-filled-192.svg', to: 'images/logo'},
  20. {from: 'logo/conversejs-filled-512.svg', to: 'images/logo'},
  21. {from: 'logo/conversejs-filled.svg', to: 'images/logo'},
  22. {from: 'logo/conversejs-gold-gradient.svg', to: 'images/logo'},
  23. {from: 'src/shared/styles/webfonts', to: 'webfonts'}
  24. ]
  25. }),
  26. new CircularDependencyPlugin({
  27. exclude: /node_modules/,
  28. failOnError: true,
  29. allowAsyncCycles: false,
  30. cwd: process.cwd(),
  31. })
  32. ];
  33. module.exports = merge(common, {
  34. plugins,
  35. entry: {
  36. "converse": path.resolve(__dirname, "../src/entry.js"),
  37. "converse.min": path.resolve(__dirname, "../src/entry.js"),
  38. },
  39. output: {
  40. filename: "[name].js",
  41. },
  42. mode: "production",
  43. module: {
  44. rules: [{
  45. test: /\.(js|ts)$/,
  46. use: [{
  47. loader: 'minify-html-literals-loader'
  48. }]
  49. },
  50. {
  51. test: /\.scss$/,
  52. use: [
  53. MiniCssExtractPlugin.loader,
  54. {
  55. loader: 'css-loader',
  56. options: {
  57. url: false,
  58. sourceMap: true
  59. }
  60. },
  61. {
  62. loader: "postcss-loader",
  63. options: { sourceMap: true }
  64. },
  65. {
  66. loader: 'sass-loader',
  67. options: {
  68. sassOptions: {
  69. includePaths: [
  70. path.resolve(__dirname, '../node_modules/'),
  71. path.resolve(__dirname, '../src/')
  72. ]
  73. },
  74. sourceMap: true
  75. }
  76. },
  77. ]
  78. }]
  79. }
  80. });