webpack.base.conf.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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: /\.(js|ts)/,
  24. include: path.resolve('src'), // instrument only testing sources with Istanbul, after ts-loader runs
  25. loader: 'istanbul-instrumenter-loader'
  26. }: {},
  27. test ? { test: /\.css$/, use: [{loader: 'style!css'}] } : {},
  28. test ? { test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader' } : {},
  29. test ? { test: /\.scss$/, use: [{loader: 'sass-loader', options:{data: `@import "./src/styles/index.scss"; `,} }]} : {},
  30. !test ?{
  31. test: /\.(sa|sc|c)ss$/,
  32. use: [
  33. isDev ? 'style-loader' : MiniCssExtractPlugin.loader,
  34. 'css-loader',
  35. 'postcss-loader',
  36. {
  37. loader: 'sass-loader',
  38. options: {
  39. data: `@import "./src/styles/index.scss"; `,
  40. },
  41. }
  42. ],
  43. }:{},
  44. {
  45. test: /\.svg$/,
  46. use: 'raw-loader'
  47. },
  48. {
  49. test: /\.vue$/,
  50. use: [
  51. {
  52. loader: 'vue-loader',
  53. options: {
  54. /* preLoaders: {
  55. js: 'istanbul-instrumenter-loader?esModules=true'
  56. }, */
  57. loaders: {
  58. sass: [isDev ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', 'postcss-loader']
  59. }
  60. }
  61. }
  62. ]
  63. },
  64. {
  65. enforce: 'pre',
  66. test: /\.(js|vue)$/,
  67. loader: 'eslint-loader',
  68. exclude: /node_modules/
  69. },
  70. {
  71. test: /\.js$/,
  72. exclude: /node_modules/,
  73. use: {
  74. loader: 'babel-loader'
  75. }
  76. },
  77. {
  78. test: /\.(png|jpg|gif|webp)$/,
  79. loader: 'url-loader',
  80. options: {
  81. limit: 3000,
  82. name: 'img/[name].[ext]',
  83. }
  84. },]
  85. },
  86. plugins: [
  87. new webpack.BannerPlugin({
  88. banner: "NutUI2(" + config.version + ") - [filebase], [hash], " + moment().format()
  89. }),
  90. new VueLoaderPlugin()
  91. ],
  92. }