webpack.config.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * The webpack config exports an object that has a valid webpack configuration
  3. * For each environment name. By default, there are two Ionic environments:
  4. * "dev" and "prod". As such, the webpack.config.js exports a dictionary object
  5. * with "keys" for "dev" and "prod", where the value is a valid webpack configuration
  6. * For details on configuring webpack, see their documentation here
  7. * https://webpack.js.org/configuration/
  8. */
  9. var path = require('path');
  10. var webpack = require('webpack');
  11. var ionicWebpackFactory = require(process.env.IONIC_WEBPACK_FACTORY);
  12. var ModuleConcatPlugin = require('webpack/lib/optimize/ModuleConcatenationPlugin');
  13. var PurifyPlugin = require('@angular-devkit/build-optimizer').PurifyPlugin;
  14. var optimizedProdLoaders = [
  15. {
  16. test: /\.json$/,
  17. loader: 'json-loader'
  18. },
  19. {
  20. test: /\.js$/,
  21. loader: [
  22. {
  23. loader: process.env.IONIC_CACHE_LOADER
  24. },
  25. {
  26. loader: '@angular-devkit/build-optimizer/webpack-loader',
  27. options: {
  28. sourceMap: true
  29. }
  30. },
  31. ]
  32. },
  33. {
  34. test: /\.ts$/,
  35. loader: [
  36. {
  37. loader: process.env.IONIC_CACHE_LOADER
  38. },
  39. {
  40. loader: '@angular-devkit/build-optimizer/webpack-loader',
  41. options: {
  42. sourceMap: true
  43. }
  44. },
  45. {
  46. loader: process.env.IONIC_WEBPACK_LOADER
  47. }
  48. ]
  49. }
  50. ];
  51. function getProdLoaders() {
  52. if (process.env.IONIC_OPTIMIZE_JS === 'true') {
  53. return optimizedProdLoaders;
  54. }
  55. return devConfig.module.loaders;
  56. }
  57. var devConfig = {
  58. entry: process.env.IONIC_APP_ENTRY_POINT,
  59. output: {
  60. path: '{{BUILD}}',
  61. publicPath: 'build/',
  62. filename: '[name].js',
  63. devtoolModuleFilenameTemplate: ionicWebpackFactory.getSourceMapperFunction(),
  64. },
  65. devtool: process.env.IONIC_SOURCE_MAP_TYPE,
  66. resolve: {
  67. extensions: ['.ts', '.js', '.json'],
  68. modules: [path.resolve('node_modules')]
  69. },
  70. module: {
  71. loaders: [
  72. {
  73. test: /\.json$/,
  74. loader: 'json-loader'
  75. },
  76. {
  77. test: /\.ts$/,
  78. loader: process.env.IONIC_WEBPACK_LOADER
  79. }
  80. ]
  81. },
  82. plugins: [
  83. ionicWebpackFactory.getIonicEnvironmentPlugin(),
  84. ionicWebpackFactory.getCommonChunksPlugin()
  85. ],
  86. // Some libraries import Node modules but don't use them in the browser.
  87. // Tell Webpack to provide empty mocks for them so importing them works.
  88. node: {
  89. fs: 'empty',
  90. net: 'empty',
  91. tls: 'empty'
  92. }
  93. };
  94. var prodConfig = {
  95. entry: process.env.IONIC_APP_ENTRY_POINT,
  96. output: {
  97. path: '{{BUILD}}',
  98. publicPath: 'build/',
  99. filename: '[name].js',
  100. devtoolModuleFilenameTemplate: ionicWebpackFactory.getSourceMapperFunction(),
  101. },
  102. devtool: process.env.IONIC_SOURCE_MAP_TYPE,
  103. resolve: {
  104. extensions: ['.ts', '.js', '.json'],
  105. modules: [path.resolve('node_modules')]
  106. },
  107. module: {
  108. loaders: getProdLoaders()
  109. },
  110. plugins: [
  111. ionicWebpackFactory.getIonicEnvironmentPlugin(),
  112. ionicWebpackFactory.getCommonChunksPlugin(),
  113. new ModuleConcatPlugin(),
  114. new PurifyPlugin()
  115. ],
  116. // Some libraries import Node modules but don't use them in the browser.
  117. // Tell Webpack to provide empty mocks for them so importing them works.
  118. node: {
  119. fs: 'empty',
  120. net: 'empty',
  121. tls: 'empty'
  122. }
  123. };
  124. module.exports = {
  125. dev: devConfig,
  126. prod: prodConfig
  127. }