webpack.config.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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].js',
  14. publicPath: '/'
  15. },
  16. resolve: {
  17. alias: {
  18. 'tabler-core': 'tabler-ui/dist/assets/js/core',
  19. 'bootstrap': 'tabler-ui/dist/assets/js/vendors/bootstrap.bundle.min',
  20. 'sparkline': 'tabler-ui/dist/assets/js/vendors/jquery.sparkline.min',
  21. 'selectize': 'tabler-ui/dist/assets/js/vendors/selectize.min',
  22. 'tablesorter': 'tabler-ui/dist/assets/js/vendors/jquery.tablesorter.min',
  23. 'vector-map': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-2.0.3.min',
  24. 'vector-map-de': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-de-merc',
  25. 'vector-map-world': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-world-mill',
  26. 'circle-progress': 'tabler-ui/dist/assets/js/vendors/circle-progress.min',
  27. 'c3': 'tabler-ui/dist/assets/js/vendors/chart.bundle.min'
  28. }
  29. },
  30. module: {
  31. rules: [
  32. // Shims for tabler-ui
  33. {
  34. test: /assets\/js\/core/,
  35. loader: 'imports-loader?bootstrap'
  36. },
  37. {
  38. test: /jquery-jvectormap-de-merc/,
  39. loader: 'imports-loader?vector-map'
  40. },
  41. {
  42. test: /jquery-jvectormap-world-mill/,
  43. loader: 'imports-loader?vector-map'
  44. },
  45. // other:
  46. {
  47. test: /\.js$/,
  48. exclude: /node_modules/,
  49. use: {
  50. loader: 'babel-loader'
  51. }
  52. },
  53. {
  54. test: /\.ejs$/,
  55. loader: 'ejs-loader'
  56. },
  57. {
  58. test: /\.scss$/,
  59. use: [
  60. MiniCssExtractPlugin.loader,
  61. 'css-loader',
  62. 'sass-loader'
  63. ]
  64. },
  65. {
  66. test: /.*tabler.*\.(jpe?g|gif|png|svg|eot|woff|ttf)$/,
  67. use: [
  68. {
  69. loader: 'file-loader',
  70. options: {
  71. outputPath: 'assets/tabler-ui/'
  72. }
  73. }
  74. ]
  75. }
  76. ]
  77. },
  78. plugins: [
  79. new webpack.ProvidePlugin({
  80. $: 'jquery',
  81. jQuery: 'jquery',
  82. _: 'underscore'
  83. }),
  84. new MiniCssExtractPlugin({
  85. filename: 'css/[name].css',
  86. chunkFilename: 'css/[id].css'
  87. }),
  88. new Visualizer({
  89. filename: '../webpack_stats.html'
  90. }),
  91. new CopyWebpackPlugin([{
  92. from: 'src/frontend/app-images',
  93. to: 'images',
  94. toType: 'dir',
  95. context: '/srv/app'
  96. }]),
  97. new webpack.optimize.LimitChunkCountPlugin({
  98. maxChunks: 1, // Must be greater than or equal to one
  99. minChunkSize: 999999999
  100. })
  101. ],
  102. /*
  103. optimization: {
  104. splitChunks: {
  105. chunks (chunk) {
  106. // exclude `my-excluded-chunk`
  107. return false;
  108. },
  109. minSize: 999999999,
  110. minChunks: 1,
  111. name: true,
  112. cacheGroups: {
  113. vendors: {
  114. test: /[\\/]node_modules[\\/]/,
  115. priority: -10
  116. },
  117. default: {
  118. minChunks: 2,
  119. priority: -20,
  120. reuseExistingChunk: true
  121. }
  122. }
  123. }
  124. },
  125. */
  126. devServer: {
  127. contentBase: path.join(__dirname, 'dist'),
  128. compress: true,
  129. port: 8080,
  130. disableHostCheck: true,
  131. host: '0.0.0.0'
  132. }
  133. };