webpack.config.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * @author oldj
  3. * @blog http://oldj.net
  4. */
  5. 'use strict'
  6. const path = require('path')
  7. const webpack = require('webpack')
  8. const moment = require('moment')
  9. const version = require('./app/version').version.join('.')
  10. module.exports = {
  11. entry: './ui/index.jsx',
  12. devtool: 'source-map',
  13. output: {
  14. path: path.join(__dirname, 'app')
  15. , filename: 'bundle.js'
  16. , sourceMapFilename: 'bundle.js.map'
  17. },
  18. resolve: {
  19. extensions: ['.js', '.jsx']
  20. },
  21. module: {
  22. rules: [
  23. {
  24. test: /\.jsx?$/,
  25. //exclude: [/node_modules/],
  26. use: ['babel-loader?presets[]=react,presets[]=latest']
  27. }, {
  28. test: /\.less$/,
  29. use: ['style-loader', 'css-loader', 'less-loader']
  30. }, {
  31. test: /\.css$/,
  32. use: ['style-loader', 'css-loader']
  33. }, {
  34. test: /\.(eot|woff|woff2|ttf|svg|png|jpg)$/,
  35. use: 'url-loader?limit=30000&name=[name]-[hash].[ext]'
  36. }
  37. ]
  38. , noParse: [/\bAgent\b/]
  39. },
  40. plugins: [
  41. new webpack.DefinePlugin({
  42. 'process.env': {
  43. NODE_ENV: JSON.stringify('production')
  44. }
  45. })
  46. , new webpack.optimize.UglifyJsPlugin({
  47. sourceMap: true,
  48. compress: {
  49. warnings: false
  50. , drop_console: false
  51. }
  52. , output: {
  53. comments: false
  54. }
  55. })
  56. , new webpack.IgnorePlugin(new RegExp('^(electron|fs|path)$'))
  57. , new webpack.BannerPlugin(`SwitchHosts! v${version}, ${moment().format('YYYY-MM-DD HH:mm:ss')}`)
  58. ]
  59. }