webpack.base.conf.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const path = require('path');
  2. const webpack = require('webpack');
  3. const MinifyPlugin = require('babel-minify-webpack-plugin');
  4. const VueLoaderPlugin = require('vue-loader/lib/plugin');
  5. const vueLoaderConfig = require('./vue-loader.conf');
  6. const { isDev, isProd, styleRule, definitions } = require('./utils');
  7. const DIST = 'dist';
  8. const definePlugin = new webpack.DefinePlugin(definitions);
  9. function resolve(dir) {
  10. return path.join(__dirname, '..', dir);
  11. }
  12. module.exports = {
  13. output: {
  14. path: resolve(DIST),
  15. publicPath: '/',
  16. filename: '[name].js',
  17. },
  18. resolve: {
  19. // Tell webpack to look for peer dependencies in `node_modules`
  20. // when packages are linked from outside directories
  21. modules: [resolve('node_modules')],
  22. extensions: ['.js', '.vue'],
  23. alias: {
  24. '#': resolve('src'),
  25. }
  26. },
  27. module: {
  28. rules: [
  29. {
  30. test: /\.vue$/,
  31. loader: 'vue-loader',
  32. options: vueLoaderConfig
  33. },
  34. {
  35. test: /\.js$/,
  36. loader: 'babel-loader',
  37. include: [resolve('src'), resolve('test')]
  38. },
  39. {
  40. test: /\.svg$/,
  41. loader: 'svg-sprite-loader',
  42. include: [resolve('src/resources/icons')],
  43. },
  44. styleRule({
  45. fallback: 'vue-style-loader',
  46. loaders: ['postcss-loader'],
  47. }),
  48. ],
  49. },
  50. // cheap-module-eval-source-map is faster for development
  51. devtool: isDev ? '#inline-source-map' : false,
  52. plugins: [
  53. definePlugin,
  54. new VueLoaderPlugin(),
  55. isProd && new MinifyPlugin(),
  56. ].filter(Boolean),
  57. };