const path=require('path'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); //const { HtmlWebpackPlugin } = require("html-webpack-plugin"); const HtmlWebpackPlugin = require('html-webpack-plugin'); //const { VueLoaderPlugin } = require('vue-loader/dist/index'); const { VueLoaderPlugin } = require('vue-loader'); module.exports={ entry:{ index:"./index.js", sample:"./utils/sample.js", }, output:{ filename:"[name].js", path:path.resolve(__dirname,"./dist"), assetModuleFilename:"media/[name].[ext]", // publicPath: '/', // 静态资源公共路径 // clean: true // 构建前清空 dist 目录 }, resolve: { alias: { vue: 'vue/dist/vue.esm-bundler.js' // 关键配置 } }, module:{ rules:[ { test:/\.css$/i, use:["style-loader","css-loader"] }, { test:/\.vue$/, use:[ { loader:"vue-loader" } ] }, // 处理 .js 文件 { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', // options: { // presets: ['@babel/preset-env'] // } } }, { test:/\.(png|jpe?g|gif|svg)$/i, // use:[{ // loader:"file-loader", // options:{ // limit: 512 * 1024, // name: "[name].[ext]", // outputPath:"media", // }, // }] type: 'asset/resource', // generator:{ // filename: "[name].[ext]", // } }, { test:/\.(woff2?|eof|ttf)$/i, // use:[{ // loader:"file-loader", // options:{ // limit: 512 * 1024, // name: "[name].[ext]", // outputPath:"media", // }, // }] type: 'asset/resource', generator:{ filename: "./font/[name].[ext]", } },] }, plugins:[ new VueLoaderPlugin(), new CleanWebpackPlugin(), new HtmlWebpackPlugin({ inject:'head', title:"index page ", template:"./index.html", filename:"index.html", chunks:['index'], }), new HtmlWebpackPlugin({ inject:'body', title:"sample page", template:"./pages/sample.html", filename:"sample.html", chunks:['sample'], }), ], // // 优化配置(如代码拆分) // optimization: { // splitChunks: { // chunks: 'all', // minSize: 20000, // cacheGroups: { // vendors: { // test: /[\\/]node_modules[\\/]/, // priority: -10, // reuseExistingChunk: true, // name: 'vendors' // } // } // } // } }