webpack.config.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. const path = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. const CopyWebpackPlugin = require('copy-webpack-plugin');
  4. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  5. const webpackMerge = require('webpack-merge');
  6. const webpack = require('webpack');
  7. const autoPrefixer = require('autoprefixer');
  8. const outDir = path.resolve(__dirname, 'dist');
  9. const srcDir = path.resolve(__dirname, 'src');
  10. module.exports = function (env, argv) {
  11. const isProductionMode = (argv["mode"] === "production");
  12. const disableMinimize = (env && env.disableMinimize) || false;
  13. const commonConfig = {
  14. devtool: 'source-map',
  15. entry: {
  16. 'changepassword.ng': './src/modules/changepassword/changepassword.module',
  17. 'configeditor.ng': './src/modules/configeditor/configeditor.module'
  18. // (see production and development specific sections below for more entries)
  19. },
  20. output: {
  21. filename: "[name].js",
  22. path: outDir
  23. },
  24. resolve: {
  25. extensions: [".ts", ".js"]
  26. },
  27. module: {
  28. rules: [
  29. {
  30. test: /.ts$/,
  31. loader: "ts-loader"
  32. },
  33. {
  34. test: /\.ts$/,
  35. enforce: 'pre',
  36. loader: 'tslint-loader'
  37. },
  38. {
  39. test: /index-dev\.html$/,
  40. loader: 'html-loader',
  41. exclude: /node_modules/
  42. },
  43. {
  44. test: /\.html$/,
  45. loader: 'ngtemplate-loader!html-loader',
  46. exclude: /index-dev\.html$/
  47. },
  48. {
  49. test: /\.(scss)$/,
  50. loaders: [ 'style-loader', 'css-loader', 'sass-loader', {
  51. loader: 'postcss-loader',
  52. options: {
  53. plugins: function () {
  54. return [autoPrefixer('last 2 versions')]
  55. }
  56. }
  57. }]
  58. },
  59. {
  60. test: /\.(png|jpg|jpeg|gif|svg)$/,
  61. loaders: [ 'url-loader?limit=25000' ]
  62. },
  63. {
  64. test: [
  65. require.resolve("textangular"),
  66. require.resolve("textangular/dist/textAngular-sanitize")
  67. ],
  68. use: "imports-loader?angular"
  69. }
  70. ]
  71. },
  72. plugins: [
  73. new CopyWebpackPlugin([
  74. { from: 'node_modules/@microfocus/ux-ias/dist/ux-ias.css', to: 'vendor/ux-ias/' },
  75. { from: 'node_modules/@microfocus/ias-icons/dist/ias-icons.css', to: 'vendor/ux-ias/' },
  76. { from: 'node_modules/@microfocus/ias-icons/dist/fonts', to: 'vendor/ux-ias/fonts' },
  77. { from: 'node_modules/textangular/dist/textAngular.css', to: 'vendor/textangular' }
  78. ])
  79. ],
  80. optimization: {
  81. splitChunks: {
  82. cacheGroups: {
  83. vendor: {
  84. test: /[\\/]node_modules[\\/]/,
  85. name: "vendor",
  86. chunks: "all"
  87. }
  88. }
  89. }
  90. }
  91. };
  92. if (isProductionMode) {
  93. // Production-specific configuration
  94. return webpackMerge(commonConfig, {
  95. entry: {
  96. 'peoplesearch.ng': './src/modules/peoplesearch/main',
  97. 'helpdesk.ng': './src/modules/helpdesk/main'
  98. },
  99. optimization:{
  100. minimize: !disableMinimize,
  101. minimizer: [
  102. new UglifyJsPlugin({
  103. sourceMap: true,
  104. uglifyOptions: {
  105. compress: {warnings: false},
  106. comments: false
  107. }
  108. })
  109. ]
  110. }
  111. });
  112. }
  113. else {
  114. // Development-specific configuration
  115. return webpackMerge(commonConfig, {
  116. entry: {
  117. 'peoplesearch.ng': './src/modules/peoplesearch/main',
  118. 'helpdesk.ng': './src/modules/helpdesk/main'
  119. },
  120. plugins: [
  121. new HtmlWebpackPlugin({
  122. chunks: ['peoplesearch.ng', 'vendor'],
  123. chunksSortMode: 'dependency',
  124. filename: 'peoplesearch.html',
  125. template: 'src/index-dev.html',
  126. inject: 'body',
  127. livereload: true
  128. }),
  129. new HtmlWebpackPlugin({
  130. chunks: ['helpdesk.ng', 'vendor'],
  131. chunksSortMode: 'dependency',
  132. filename: 'helpdesk.html',
  133. template: 'src/index-dev.html',
  134. inject: 'body',
  135. livereload: true
  136. })
  137. ],
  138. });
  139. }
  140. };