2022-05-18 15:27:44 +08:00
|
|
|
|
/**
|
|
|
|
|
* 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 = {
|
|
|
|
|
// 入口起点
|
2022-05-18 16:47:17 +08:00
|
|
|
|
entry: {
|
|
|
|
|
html: "./src/index.html",
|
|
|
|
|
style: "./src/webpack-style.js",
|
|
|
|
|
// script: "./src/webpack-script.js",
|
|
|
|
|
},
|
2022-05-18 15:27:44 +08:00
|
|
|
|
// 输出
|
|
|
|
|
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({
|
2022-05-18 16:47:17 +08:00
|
|
|
|
template: './src/index.html',
|
|
|
|
|
inject: 'body',
|
|
|
|
|
scriptLoading: 'blocking'
|
2022-05-18 15:27:44 +08:00
|
|
|
|
}),
|
|
|
|
|
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 // 自动打开浏览器
|
|
|
|
|
}
|
|
|
|
|
}
|