webpack.config.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. var webpack = require('webpack');
  2. var deepExtend = require('deep-extend');
  3. var fs = require('fs');
  4. var path = require('path');
  5. var exclude = /node_modules/;
  6. var packageJsonString = fs.readFileSync('package.json', 'utf8');
  7. var packageJson = JSON.parse(packageJsonString);
  8. console.log('building version', packageJson.version);
  9. var baseEnvVars = {
  10. ON_DEV: false,
  11. ON_TEST: false,
  12. ON_PROD: false,
  13. VERSION: JSON.stringify(packageJson.version)
  14. };
  15. var baseConfig = {
  16. context: here('src'),
  17. entry: './index.js',
  18. output: {
  19. filename: 'angular-formly-templates-bootstrap.js',
  20. path: here('dist'),
  21. library: 'ngFormlyTemplatesBootstrap',
  22. libraryTarget: 'umd'
  23. },
  24. devtool: 'source-map',
  25. stats: {
  26. colors: true,
  27. reasons: true
  28. },
  29. externals: {
  30. angular: 'angular',
  31. 'angular-formly': {
  32. root: 'ngFormly',
  33. amd: 'angular-formly',
  34. commonjs2: 'angular-formly',
  35. commonjs: 'angular-formly'
  36. },
  37. 'api-check': {
  38. root: 'apiCheck',
  39. amd: 'api-check',
  40. commonjs2: 'api-check',
  41. commonjs: 'api-check'
  42. }
  43. },
  44. plugins: [],
  45. resolve: {
  46. extensions: ['', '.js'],
  47. alias: {
  48. 'angular-fix': here('src/angular-fix')
  49. }
  50. },
  51. module: {
  52. loaders: [
  53. {test: /\.html$/, loader: 'raw', exclude: exclude},
  54. {test: /\.js$/, loader: 'ng-annotate!babel!jshint', exclude: exclude}
  55. ]
  56. }
  57. };
  58. var devConfig = {};
  59. var prodConfig = {
  60. output: {
  61. filename: 'angular-formly-templates-bootstrap.min.js',
  62. path: here('dist')
  63. },
  64. plugins: [
  65. new webpack.optimize.DedupePlugin(),
  66. new webpack.optimize.OccurenceOrderPlugin(),
  67. new webpack.optimize.AggressiveMergingPlugin(),
  68. new webpack.optimize.UglifyJsPlugin({
  69. exclude: /\.test\.js$/,
  70. compress: {
  71. warnings: false
  72. }
  73. })
  74. ],
  75. jshint: {
  76. failOnHint: true,
  77. emitErrors: true
  78. }
  79. };
  80. var testCIConfig = deepExtend({}, prodConfig);
  81. var testConfig = deepExtend({}, devConfig);
  82. delete testConfig.jshint;
  83. delete testCIConfig.jshint;
  84. var envContexts = {
  85. dev: {
  86. ON_DEV: true
  87. },
  88. prod: {
  89. ON_PROD: true
  90. },
  91. test: {
  92. ON_TEST: true
  93. },
  94. 'test:ci': {
  95. ON_TEST: true
  96. }
  97. };
  98. module.exports = getConfig();
  99. module.exports.getConfig = getConfig;
  100. function getConfig(context) {
  101. context = context || 'dev';
  102. var configContexts = {
  103. dev: devConfig,
  104. prod: prodConfig,
  105. test: testConfig,
  106. 'test:ci': testCIConfig
  107. };
  108. var resultConfig = deepExtend({}, baseConfig, configContexts[context]);
  109. var resultVars = deepExtend({}, baseEnvVars, envContexts[context]);
  110. resultConfig.plugins.push(new webpack.DefinePlugin(resultVars));
  111. resultConfig.plugins.push(new webpack.BannerPlugin(getBanner(), {raw: true}));
  112. console.log('Webpack config is in ' + context + ' mode');
  113. return resultConfig;
  114. }
  115. function getBanner() {
  116. return '// ' + packageJson.name + ' version ' +
  117. packageJson.version +
  118. ' built with ♥ by ' +
  119. packageJson.contributors.join(', ') +
  120. ' (ó ì_í)=óò=(ì_í ò)\n';
  121. }
  122. function here(p) {
  123. return path.join(__dirname, p || '');
  124. }