webpack.config.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. const HtmlWebpackPlugin = require('html-webpack-plugin');
  7. const PACKAGE = require('./package.json');
  8. module.exports = {
  9. entry: {
  10. main: './js/index.js',
  11. login: './js/login.js'
  12. },
  13. output: {
  14. path: path.resolve(__dirname, 'dist'),
  15. filename: `js/[name].bundle.js?v=${PACKAGE.version}`,
  16. chunkFilename: `js/[name].bundle.[id].js?v=${PACKAGE.version}`,
  17. publicPath: '/'
  18. },
  19. resolve: {
  20. alias: {
  21. 'tabler-core': 'tabler-ui/dist/assets/js/core',
  22. 'bootstrap': 'tabler-ui/dist/assets/js/vendors/bootstrap.bundle.min',
  23. 'sparkline': 'tabler-ui/dist/assets/js/vendors/jquery.sparkline.min',
  24. 'selectize': 'tabler-ui/dist/assets/js/vendors/selectize.min',
  25. 'tablesorter': 'tabler-ui/dist/assets/js/vendors/jquery.tablesorter.min',
  26. 'vector-map': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-2.0.3.min',
  27. 'vector-map-de': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-de-merc',
  28. 'vector-map-world': 'tabler-ui/dist/assets/js/vendors/jquery-jvectormap-world-mill',
  29. 'circle-progress': 'tabler-ui/dist/assets/js/vendors/circle-progress.min',
  30. 'c3': 'tabler-ui/dist/assets/js/vendors/chart.bundle.min'
  31. }
  32. },
  33. module: {
  34. rules: [
  35. // Shims for tabler-ui
  36. {
  37. test: /assets\/js\/core/,
  38. loader: 'imports-loader?bootstrap'
  39. },
  40. {
  41. test: /jquery-jvectormap-de-merc/,
  42. loader: 'imports-loader?vector-map'
  43. },
  44. {
  45. test: /jquery-jvectormap-world-mill/,
  46. loader: 'imports-loader?vector-map'
  47. },
  48. // other:
  49. {
  50. type: 'javascript/auto', // <= Set the module.type explicitly
  51. test: /\bmessages\.json$/,
  52. loader: 'messageformat-loader',
  53. options: {
  54. biDiSupport: false,
  55. disablePluralKeyChecks: false,
  56. formatters: null,
  57. intlSupport: false,
  58. locale: ['en'],
  59. strictNumberSign: false
  60. }
  61. },
  62. {
  63. test: /\.js$/,
  64. exclude: /node_modules/,
  65. use: {
  66. loader: 'babel-loader'
  67. }
  68. },
  69. {
  70. test: /\.ejs$/,
  71. loader: 'ejs-loader'
  72. },
  73. {
  74. test: /\.scss$/,
  75. use: [
  76. MiniCssExtractPlugin.loader,
  77. 'css-loader',
  78. 'sass-loader'
  79. ]
  80. },
  81. {
  82. test: /.*tabler.*\.(jpe?g|gif|png|svg|eot|woff|ttf)$/,
  83. use: [
  84. {
  85. loader: 'file-loader',
  86. options: {
  87. outputPath: 'assets/tabler-ui/'
  88. }
  89. }
  90. ]
  91. },
  92. {
  93. test: /source-sans-pro.*\.(woff(2)?)(\?v=\d+\.\d+\.\d+)?$/,
  94. use: [
  95. {
  96. loader: 'file-loader',
  97. options: {
  98. name: '[name].[ext]',
  99. outputPath: 'assets/'
  100. }
  101. }
  102. ]
  103. }
  104. ]
  105. },
  106. plugins: [
  107. new webpack.ProvidePlugin({
  108. $: 'jquery',
  109. jQuery: 'jquery',
  110. _: 'underscore'
  111. }),
  112. new HtmlWebpackPlugin({
  113. template: '!!ejs-webpack-loader!html/index.ejs',
  114. filename: 'index.html',
  115. inject: false,
  116. templateParameters: {
  117. version: PACKAGE.version
  118. }
  119. }),
  120. new HtmlWebpackPlugin({
  121. template: '!!ejs-webpack-loader!html/login.ejs',
  122. filename: 'login.html',
  123. inject: false,
  124. templateParameters: {
  125. version: PACKAGE.version
  126. }
  127. }),
  128. new MiniCssExtractPlugin({
  129. filename: 'css/[name].css',
  130. chunkFilename: 'css/[id].css'
  131. }),
  132. new Visualizer({
  133. filename: '../webpack_stats.html'
  134. }),
  135. new CopyWebpackPlugin([{
  136. from: 'app-images',
  137. to: 'images',
  138. toType: 'dir',
  139. context: '/app/frontend'
  140. }])
  141. ]
  142. };