Webpack中搭建本地服务dev-server

开发过程中关于实现文件内容发生变化时,可监听文件变化内容、自动完成编译热更新,webpack提供了几种可选方式:

1. webpack watch mode监听文件变化

watch可在导出配置中添加或者在webpack 启动命令中添加--watch

注意:watch 的配置可以监听到文件的变化、但是不具备自动刷新浏览器,即实现开发过程中的热更新 HMR,需要通过 webpack 的另一插件实现该功能 webpack-dev-server

2. webpack-dev-server常用基本配置

npm i webpack-dev-server -D

webpack-dev-server在根据配置编译文件后,不会写入任何输出文件,通过将文件保留在内存中,搭建本地服务,读取内存来输出在指定端口实现开发中项目热更新。

关于 devServer 的常用配置项:

javascript 复制代码
  devServer: {
    hot: true, // 开始热更新
    // hot: 'only',  // 编译构建失败时不刷新浏览器页面 保留之前打印记录 热更新
    port: 7777, // 监听请求的端口
    open: true,  // 自动打开服务地址
    compress: true, // 是否开始 gzip 压缩
    proxy: { // 代理配置
      "/api":{
        target: "代理的目标服务器地址",
        pathRewrite: { "^/api": "" },
        changeOrigin: true, // 是否保留本机请求头host
        secure: false // 是否开启安全协议  开启后无法代理 https协议地址
      }
    },
    historyApiFallback: true // 路由跳转失败时返回上一级页面  可自行配置指定路由的跳转配置
  },

关于compress的压缩效果:

true:

false:

3. webpack-dev-server 的基本实现原理

webpack-dev-server 是运用另一个node 框架 express开启本地的静态资源服务,和开启Socket服务;

  • express server负责直接提供静态资源的服务(打包后的资源直接被浏览器请求和解析);
  • HMR Socket Server,是一个socket的长连接建立连接后双方可以通信,当服务器监听到对应的模块发生变化时,会生成两个文件.json(manifest文件)和.js文件(update chunk),通过长连接,可以直接将这两个文件主动发送给客户端(浏览器)浏览器拿到两个新的文件后,通过HMR runtime机制,加载这两个文件,并且针对修改的模块进行更新;

HMR运行原理图:

相关推荐
fatcoder2 分钟前
玩转Nginx 03 — location 匹配规则:让不同的路径各回各家
前端·后端·nginx
HjhIron6 分钟前
前端面试高频考点 —— TS 高级类型 & CSS 三列布局
前端
李剑一15 分钟前
《牛来》火了?我用ThreeJs实现了一个简易版的,代码全送给你,文章最后附演示效果
前端
世界哪有真情1 小时前
AI 写代码两年多,我发现自己越来越"看不进去"了
前端·后端·ai编程
星栈1 小时前
被 Rust async 纠正的三个异步认知
前端·后端·rust
前端_刘师兄1 小时前
前端开发工程师转FAE工程师路线规划
前端
禁止摆烂_才浅1 小时前
前端 AI 面试题
前端·面试·ai编程
程序员老赵1 小时前
Docker 部署 ZLMediaKit:轻松搭建高性能流媒体服务平台
前端·javascript·后端
Liora_Yvonne1 小时前
为什么每次发版,总有用户看到白屏?
前端
嘟嘟07171 小时前
从浏览器到 hello world:Docker + nginx 反向代理 + Node 最小服务器一次讲清
docker·容器·node.js