webpack 之开发环境优化 HMR

// webpack.config.js
/**
* HMR hot module replacement 热模块替换 / 模块热替换
* 作用:一个模块发生变化,只会重新打包这一个模块(而不是打包所有模块)
* 极大提升构建速度
*
*
* 样式文件:可以使用 HMR 功能:因为 style-loader 内部实现了
* js 文件:默认不能使用 HMR 功能 --> 需要修改js代码,添加支持HMR功能的代码
* 注意:HMR 功能对js的处理,只能处理菲入口js文件的其他文件
* html文件:默认不能使用 HMR 功能,同时会导致问题:html 文件不能热更新了
* 解决:修改entry入口,将html文件引入
*/ const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin') // 代码复用loader
const commonCssLoader = [
// 创建 style 标签,将js中的样式资源插入进行,添加到 head 中生效
'style-loader',
// 将css文件变成commonjs 模块加载js中, 里面内容是样式字符串
'css-loader'
] module.exports = {
// webpack 配置
// 入口起点
entry : ['./src/index.js', './src/index.html'],
// 输出
output : {
// 输出文件名
filename : 'js/built.js',
// 输出路径
path : resolve(__dirname, 'dist')
},
// loader 配置
module : {
rules : [
{
test : /\.css$/, // 匹配哪些文件
//使用哪些 loader 进行处理
use: [
// use 数组中的 loader 执行顺序:从右到左,从下到上依次执行
...commonCssLoader
]
},
{
test : /\.less$/,
use: [
...commonCssLoader,
'less-loader'
]
},
{
test : /\.html$/,
loader : 'html-loader'
}
]
},
// plugins 的配置
plugins : [
// 详细 plugins 的配置
// html-webpack-plugin
// 功能:默认会创建一个空的html文件,自动引入打包输出的所有资源(js/css)
new HtmlWebpackPlugin({
// 增加一个配置
// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(js/css)
template : './src/index.html',
}),
],
//模式
mode : 'development', // 开发模式
// mode : 'production' // 生产模式
devServer: {
// 项目构建后的路径
contentBase : resolve(__dirname, 'dist'),
// 启动 gzip 压缩
compress : true,
// 端口号
port : 3000,
// 自动打开本地默认浏览器
open : true,
// 开启 HMR 功能
hot: true
}
}
// index.js
import print from './print.js'
import './index.css' const add = (x, y) => x + y; console.log('add(1, 2)', add(1, 2));
console.log('"object"', "object") if (module.hot) {
// 一旦 module.hot 为 true,说明开启了 HMR 功能。 --> 让HMR 功能代码生效
module.hot.accept('./print.js', function() {
// 方法会监听 print.js 文件的变化,一旦发生变化,其他模块不会重新打包构建。
// 会执行后面的回调函数
print()
})
}

最新文章

  1. hdu分类 Math Theory(还有三题!)
  2. Discrete.Differential.Geometry-An.Applied.Introduction(sig2008)笔记
  3. [php-src]窥探Php内核中的数组与面向对象
  4. wamp环境下安装memcached最好的详解教程^.^:(只需要3个步骤 )
  5. MySql 首记
  6. TCP报文段首部详解
  7. canvas应用-思维导图
  8. JAVA JDBC连接 SQLServer2012 连接失败 端口号错误
  9. JSP 结构
  10. 如何将Java Web项目部署到服务器上
  11. countDownLatch和cyclicBarrier
  12. Kafka监控安装
  13. rsync 安装
  14. Asp.Net MVC+EF+三层架构
  15. Source Insight 4.0安装使用教程
  16. npm run dev 在Linux上持久运行
  17. java框架注意
  18. MYSQL数据模型
  19. [转载] C++ STL中判断list为空,size()==0和empty()有什么区别
  20. pycharm如何全局进行查找一个关键词

热门文章

  1. Java安全之 ClassLoader类加载器
  2. python3.7发送邮件带附件
  3. P6113-[模板]一般图最大匹配【带花树】
  4. MySQL、Redis、MongoDB网络抓包工具
  5. Java——多线程编程学习/01
  6. mimikatz使用笔记
  7. 浅谈机(J)惨(C)技巧——从入门到精通(?)
  8. 网络基础--简单理解什么是DNS? TCP? UDP? Http? Socket?
  9. css新增属性之边框
  10. Winfrom窗体初始化和窗体Load方法前后