/** * webpack 配置文件 * * @author coder-xiaomo * @date 2022-05-17 */ const { resolve } = require('path'); const HtmlWebpackPlugin = require("html-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { // 入口起点 entry: { html: "./src/index.html", style: "./src/webpack-style.js", // script: "./src/webpack-script.js", }, // 输出 output: { // 输出文件名 filename: 'assets/js/built.[contenthash:8].js', chunkFilename: 'assets/js/[id].[contenthash:8].js', // 输出路径 __dirname: 当前文件的目录绝对路径 path: resolve(__dirname, 'dist') }, // loader配置 module: { rules: [ // 详细配置 // { // // 匹配文件 // test: /\.css$/, // // 使用哪些 loader 进行处理 // use: [ // 执行顺序:从后往前 // // 'style-loader', // 创建 style 标签并插入 // MiniCssExtractPlugin.loader, // 将 css 从 js 文件中提取出来(替代 'style-loader' ) // 'css-loader' // 将 css 文件编程 commonjs 模块加载到 js 中(样式字符串) // ] // }, { // 匹配文件 test: /\.css$/, // 使用哪些 loader 进行处理 use: [ MiniCssExtractPlugin.loader, 'css-loader' ] }, // { // test: /\.(jpg|png|gif)$/, // loader: 'url-loader', // options: { // // 图片小于 8KB,则使用 base64 处理(减少请求数量) // limit: 8 * 1024, // // 问题:url-loader 默认使用es6模块化解析,而html-loader引入图片是commonjs // // 解析时会出问题: [object Module] // // 解决:关闭ur1-loader的es6模块化,使用commonjs解析 // esModule: false, // // 给图片进行重命名 // // [hash:10] 取图片的 hash 的前10位 // // [ext] 取文件原来扩展名 // name: '[hash:10].[ext]', // outputPath: "assets/image" // } // }, { test: /\.html/, // 处理 html 文件的 img 图片(负责引入 img,从而能被 url-loader 处理) loader: 'html-loader' }, // 打包其他资源 { exclude: /\.(css|js|html|less|jpg|png|gif)$/, loader: 'file-loader', options: { name: '[hash:10].[ext]', outputPath: "assets/others" } }, ] }, // plugin配置 plugins: [ // 创建一个html,自动引入打包的所有资源 new HtmlWebpackPlugin({ template: './src/index.html', inject: 'body', scriptLoading: 'blocking' }), new MiniCssExtractPlugin({ filename: "assets/css/built.[contenthash:8].css" }), new CleanWebpackPlugin() ], // 模式 // mode: 'development', // mode: 'production', // 开发服务器 只会在内存中编译打包,不会有任何输出 devServer: { static: resolve(__dirname, 'dist'), // 项目构建后路径 compress: true, // 启动 GZIP 压缩 port: 3000, open: true // 自动打开浏览器 } }