webpack.base.conf.js 2.7 KB

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