webpack.common.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /* global __dirname, module, process */
  2. const path = require('path');
  3. let bootstrap_ignore_modules = ['carousel', 'scrollspy', 'tooltip', 'toast'];
  4. const BOOTSTRAP_IGNORE_MODULES = (process.env.BOOTSTRAP_IGNORE_MODULES || '').replace(/ /g, '').trim();
  5. if (BOOTSTRAP_IGNORE_MODULES.length > 0) {
  6. bootstrap_ignore_modules = bootstrap_ignore_modules.concat(BOOTSTRAP_IGNORE_MODULES.split(','));
  7. }
  8. module.exports = {
  9. output: {
  10. path: path.resolve(__dirname, '../dist'), // Output path for generated bundles
  11. chunkFilename: '[name].js'
  12. },
  13. entry: path.resolve(__dirname, '../src/entry.js'),
  14. externals: [{
  15. "window": "window"
  16. }],
  17. watchOptions: {
  18. ignored: /dist/,
  19. },
  20. module: {
  21. rules: [
  22. {
  23. test: /LC_MESSAGES[\\/]converse.po$/,
  24. type: "json",
  25. use: [
  26. {
  27. loader: 'po-loader',
  28. options: {
  29. 'format': 'jed',
  30. 'domain': 'converse'
  31. }
  32. }
  33. ]
  34. }, {
  35. test: /webfonts[\\/].*\.(woff(2)?|ttf|eot|truetype|svg)(\?v=\d+\.\d+\.\d+)?$/,
  36. use: [
  37. {
  38. loader: 'file-loader',
  39. options: {
  40. name: '[name].[ext]',
  41. outputPath: 'webfonts/'
  42. }
  43. }
  44. ]
  45. }, {
  46. test: /\.scss$/,
  47. use: [
  48. 'style-loader',
  49. {
  50. loader: 'css-loader',
  51. options: {
  52. sourceMap: true
  53. }
  54. },
  55. 'postcss-loader',
  56. {
  57. loader: 'sass-loader',
  58. options: {
  59. sassOptions: {
  60. includePaths: [
  61. path.resolve(__dirname, '../node_modules/'),
  62. path.resolve(__dirname, '../src/')
  63. ]
  64. },
  65. sourceMap: true
  66. }
  67. }
  68. ]
  69. }, {
  70. test: /\.js$/,
  71. include: [
  72. /src/,
  73. /node_modules\/mergebounce/,
  74. /node_modules\/lit-html/,
  75. /node_modules\/strophe/,
  76. /node_modules\/pluggable/,
  77. /node_modules\/@converse/,
  78. ],
  79. use: {
  80. loader: 'babel-loader',
  81. options: {
  82. presets: [
  83. ["@babel/preset-env", {
  84. "targets": {
  85. "browsers": [">1%", "not ie 11", "not op_mini all", "not dead"]
  86. }
  87. }]
  88. ],
  89. plugins: []
  90. }
  91. }
  92. }, {
  93. test: /bootstrap\.native/,
  94. use: {
  95. loader: 'bootstrap.native-loader',
  96. options: {
  97. bs_version: 4,
  98. ignore: bootstrap_ignore_modules
  99. }
  100. }
  101. }],
  102. },
  103. resolve: {
  104. extensions: ['.js'],
  105. modules: [
  106. 'node_modules',
  107. path.resolve(__dirname, "../src")
  108. ],
  109. alias: {
  110. "IPv6": path.resolve(__dirname, "../node_modules/urijs/src/IPv6"),
  111. "SecondLevelDomains": path.resolve(__dirname, "../node_modules/urijs/src/SecondLevelDomains"),
  112. "formdata-polyfill": path.resolve(__dirname, "../node_modules/formdata-polyfill/FormData"),
  113. "punycode": path.resolve(__dirname, "../node_modules/urijs/src/punycode")
  114. }
  115. }
  116. }