webpack.config.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. const path = require('path');
  2. const webpack = require('webpack');
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  4. const Visualizer = require('webpack-visualizer-plugin');
  5. const CopyWebpackPlugin = require('copy-webpack-plugin');
  6. module.exports = {
  7. entry: {
  8. main: './src/frontend/js/index.js',
  9. login: './src/frontend/js/login.js'
  10. },
  11. output: {
  12. path: path.resolve(__dirname, 'dist'),
  13. filename: 'js/[name].bundle.js',
  14. chunkFilename: 'js/[name].bundle.[id].js',
  15. publicPath: '/'
  16. },
  17. resolve: {
  18. alias: {
  19. 'tabler-core': 'tabler-ui/dist/assets/js/core',
  20. 'bootstrap': 'tabler-ui/dist/assets/js/vendors/bootstrap.bundle.min',
  21. 'sparkline': 'tabler-ui/dist/assets/js/vendors/jquery.sparkline.min',
  22. 'selectize': 'tabler-ui/dist/assets/js/vendors/selectize.min',
  23. 'tablesorter': 'tabler-ui/dist/assets/js/vendors/jquery.tablesorter.min',
  24. 'vector-map': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-2.0.3.min',
  25. 'vector-map-de': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-de-merc',
  26. 'vector-map-world': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-world-mill',
  27. 'circle-progress': 'tabler-ui/dist/assets/js/vendors/circle-progress.min',
  28. 'c3': 'tabler-ui/dist/assets/js/vendors/chart.bundle.min'
  29. }
  30. },
  31. module: {
  32. rules: [
  33. // Shims for tabler-ui
  34. {
  35. test: /assets\/js\/core/,
  36. loader: 'imports-loader?bootstrap'
  37. },
  38. {
  39. test: /jquery-jvectormap-de-merc/,
  40. loader: 'imports-loader?vector-map'
  41. },
  42. {
  43. test: /jquery-jvectormap-world-mill/,
  44. loader: 'imports-loader?vector-map'
  45. },
  46. // other:
  47. {
  48. type: 'javascript/auto', // <= Set the module.type explicitly
  49. test: /\bmessages\.json$/,
  50. loader: 'messageformat-loader',
  51. options: {
  52. biDiSupport: false,
  53. disablePluralKeyChecks: false,
  54. formatters: null,
  55. intlSupport: false,
  56. locale: ['en'/*, 'es'*/],
  57. strictNumberSign: false
  58. }
  59. },
  60. {
  61. test: /\.js$/,
  62. exclude: /node_modules/,
  63. use: {
  64. loader: 'babel-loader'
  65. }
  66. },
  67. {
  68. test: /\.ejs$/,
  69. loader: 'ejs-loader'
  70. },
  71. {
  72. test: /\.scss$/,
  73. use: [
  74. MiniCssExtractPlugin.loader,
  75. 'css-loader',
  76. 'sass-loader'
  77. ]
  78. },
  79. {
  80. test: /.*tabler.*\.(jpe?g|gif|png|svg|eot|woff|ttf)$/,
  81. use: [
  82. {
  83. loader: 'file-loader',
  84. options: {
  85. outputPath: 'assets/tabler-ui/'
  86. }
  87. }
  88. ]
  89. }
  90. ]
  91. },
  92. plugins: [
  93. new webpack.ProvidePlugin({
  94. $: 'jquery',
  95. jQuery: 'jquery',
  96. _: 'underscore'
  97. }),
  98. new MiniCssExtractPlugin({
  99. filename: 'css/[name].css',
  100. chunkFilename: 'css/[id].css'
  101. }),
  102. new Visualizer({
  103. filename: '../webpack_stats.html'
  104. }),
  105. new CopyWebpackPlugin([{
  106. from: 'src/frontend/app-images',
  107. to: 'images',
  108. toType: 'dir',
  109. context: '/app'
  110. }])
  111. ]
  112. };