webpack.config.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const path=require('path');
  2. const { CleanWebpackPlugin } = require('clean-webpack-plugin');
  3. //const { HtmlWebpackPlugin } = require("html-webpack-plugin");
  4. const HtmlWebpackPlugin = require('html-webpack-plugin');
  5. //const { VueLoaderPlugin } = require('vue-loader/dist/index');
  6. const { VueLoaderPlugin } = require('vue-loader');
  7. module.exports={
  8. entry:{
  9. index:"./index.js",
  10. },
  11. output:{
  12. filename:"[name].js",
  13. path:path.resolve(__dirname,"./dist")
  14. },
  15. resolve: {
  16. alias: {
  17. vue: 'vue/dist/vue.esm-bundler.js' // 关键配置
  18. }
  19. },
  20. module:{
  21. rules:[
  22. {
  23. test:/\.css$/i,
  24. use:["style-loader","css-loader"],
  25. options: {
  26. outputPath: './style/' // [!code ++]
  27. }
  28. },
  29. {
  30. test:/\.vue$/,
  31. use:[
  32. { loader:"vue-loader" }
  33. ]
  34. },
  35. // 处理 .js 文件
  36. {
  37. test: /\.js$/,
  38. exclude: /node_modules/,
  39. use: {
  40. loader: 'babel-loader',
  41. options: {
  42. presets: ['@babel/preset-env']
  43. }
  44. }
  45. },
  46. {
  47. test:/\.(png|jpe?g|gif|svg)$/i,
  48. // use:[{
  49. // loader:"file-loader",
  50. // options:{
  51. // limit: 512 * 1024,
  52. // name: "[name].[ext]",
  53. // outputPath:"media",
  54. // },
  55. // }]
  56. type: 'asset/resource',
  57. generator:{
  58. filename: "[name].[ext]",
  59. }
  60. },
  61. {
  62. test:/\.(woff2?|eof|ttf)$/i,
  63. // use:[{
  64. // loader:"file-loader",
  65. // options:{
  66. // limit: 512 * 1024,
  67. // name: "[name].[ext]",
  68. // outputPath:"media",
  69. // },
  70. // }]
  71. type: 'asset/resource',
  72. generator:{
  73. filename: "./font/[name].[ext]",
  74. }
  75. },]
  76. },
  77. plugins:[
  78. new VueLoaderPlugin(),
  79. new CleanWebpackPlugin(),
  80. new HtmlWebpackPlugin({
  81. inject:'head',
  82. title:"index page ",
  83. template:"./index.html",
  84. filename:"index.html",
  85. chunks:['index'],
  86. }),
  87. ],
  88. // 优化配置(如代码拆分)
  89. optimization: {
  90. splitChunks: {
  91. chunks: 'all',
  92. minSize: 20000,
  93. cacheGroups: {
  94. vendors: {
  95. test: /[\\/]node_modules[\\/]/,
  96. priority: -10,
  97. reuseExistingChunk: true,
  98. name: 'vendors'
  99. }
  100. }
  101. }
  102. }
  103. }