webpack.base.conf.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. const webpack = require('webpack');
  2. const config = require('../package.json');
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  4. const VueLoaderPlugin = require('vue-loader/lib/plugin');
  5. const moment = require('moment');
  6. const isDev = process.env.NODE_ENV === 'development';
  7. var test = process.env.NODE_ENV === 'test';
  8. const path = require('path');
  9. module.exports = {
  10. stats: {
  11. entrypoints: false,
  12. children: false
  13. },
  14. resolve: {
  15. extensions: ['.js', '.vue', '.json'],
  16. alias: {
  17. 'vue$': 'vue/dist/vue.esm.js',
  18. }
  19. },
  20. module: {
  21. rules: [
  22. !test ? {
  23. test: /\.(sa|sc|c)ss$/,
  24. use: [
  25. isDev ? 'style-loader' : MiniCssExtractPlugin.loader,
  26. 'css-loader',
  27. 'postcss-loader',
  28. {
  29. loader: 'sass-loader',
  30. options: {
  31. data: `@import "./src/styles/index.scss"; `,
  32. },
  33. }
  34. ],
  35. }:{},
  36. {
  37. test: /\.svg$/,
  38. use: 'raw-loader'
  39. },
  40. {
  41. test: /\.vue$/,
  42. use: [
  43. {
  44. loader: 'vue-loader',
  45. options: {
  46. /* preLoaders: {
  47. js: 'istanbul-instrumenter-loader?esModules=true'
  48. }, */
  49. loaders: {
  50. sass: [isDev ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', 'postcss-loader']
  51. }
  52. }
  53. }
  54. ]
  55. },
  56. {
  57. enforce: 'pre',
  58. test: /\.(js|vue)$/,
  59. loader: 'eslint-loader',
  60. exclude: /node_modules/
  61. },
  62. {
  63. test: /\.js$/,
  64. exclude: /node_modules/,
  65. use: {
  66. loader: 'babel-loader'
  67. }
  68. },
  69. {
  70. test: /\.(png|jpg|gif|webp)$/,
  71. loader: 'url-loader',
  72. options: {
  73. limit: 3000,
  74. name: 'img/[name].[ext]',
  75. }
  76. },]
  77. },
  78. plugins: [
  79. new webpack.BannerPlugin({
  80. banner: `NutUI v${config.version} - [filebase], [hash], ${moment().format()}
  81. (c) 2017-2018 JDC
  82. Released under the MIT License.`
  83. }),
  84. new VueLoaderPlugin()
  85. ],
  86. }