/*
开发环境配置:能让代码运行
运行项目指令:
webpack 会将打包结果输出出去
npx webpack-dev-server 只会在内存中编译打包,没有输出
*/
/**
* HMR: hot module replacement (热模块替换)
* 作用: 一个模块发生变化,只会重新打包这一个模块(而不是打包所有模块)
* 极大提升构建速度
*
* 样式文件: 可以使用 HMR 功能(因为 style-loader 内部实现了)
* js 文件: 默认不能使用 HMR --> 需要修改 js 代码, 添加支持 HMR 功能的代码
* 注意: HMR 功能对 js 的处理,只能处理非入口 js 文件的其他文件(因为入口js文件会将其他文件引入,入口文件变化会重新加载其他文件)
* html 文件: 默认不能使用 HMR 功能,同时会导致问题:html 文件不能更新了 (html 文件不用做 HMR)
* 解决方法: 修改 entry 入口,将 html 文件引入
*/
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// 引入 html 文件,解决 html 文件不能热更新的问题
entry: ['./src/js/index.js', './src/index.html'],
output: {
filename: 'js/built.js',
path: resolve(__dirname, 'build')
},
module: {
rules: [
// loader的配置
{
// 处理less资源
test: /\.less$/,
use: ['style-loader', 'css-loader', 'less-loader']
},
{
// 处理css资源
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
// 处理图片资源
test: /\.(jpg|png|gif)$/,
loader: 'url-loader',
options: {
limit: 8 * 1024,
name: '[hash:10].[ext]',
// 关闭es6模块化
esModule: false,
outputPath: 'imgs'
}
},
{
// 处理html中img资源
test: /\.html$/,
loader: 'html-loader'
},
{
// 处理其他资源
exclude: /\.(html|js|css|less|jpg|png|gif)/,
loader: 'file-loader',
options: {
name: '[hash:10].[ext]',
outputPath: 'media'
}
}
]
},
plugins: [
// plugins的配置
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
mode: 'development',
devServer: {
contentBase: resolve(__dirname, 'build'),
compress: true,
port: 3000,
open: true,
// 开启 HMR 功能
// 当修改了 webpack 配置,新配置要想生效,必须重启 webpack 服务
hot: true
}
};
webpack性能优化——热模块替换(HMR)
最新推荐文章于 2024-04-19 08:54:56 发布