webpack dev server 与 hot module replace 提高开发效率
通过 webpack 命令编译源代码时,如果我们对源代码进行了修改,需要重新执行命令才能看到编译后的效果。
这样在开发中非常的影响效率,如果存在一种方式,当文件被修改时,webpack 自动监听重新编译,并反馈给开发者,这样就能更高效的进行开发。
watch
我们通过 webpack 执行命令时,编译完成之后进程会停止,而 webpack --watch 编译完成后,不会停止进程,并且当文件内容发生更改时,将重新执行编译操作。

在项目中有两种配置方式
- package.json 中配置命令
- webpack.config.js 中配置参数
// package.json
"scripts": {
"build": "webpack",
"watch": "webpack --watch",
},
// webpack.config.js
module.exports = {
watch: true,
};
配置在 package.json 中通过 npm run watch 执行命令,实际上就是执行的 webpack --watch,在 webpack.config.js 中配置 wath 参数,可以直接通过 npm run build 编译
webpack-dev-server
通过 watch 命令,每一次重新编译都会生成新的文件,包括 js、html、css、图片资源,这样效率不高,并且通过开启服务,在浏览器中展示 html 页面的方式每次都会刷新页面。
可以通过 webpack-dev-server 解决以上问题,它每次编译不会重新生成文件,而是将资源保存在内存中。
通过 npm install webpack-dev-server -D 安装依赖,package.json 中配置
// package.json
"scripts": {
"build": "webpack",
"serve": "webpack serve"
},
npm run serve 执行命令,编译完成后也不会终止进程,当文件更改后会再次重新编译

此时会开启一个服务,通过 http://localhost:8080/ 在浏览器中访问

Hot Module Replace
目前为止,每次修改了文件,都会重新加载整个页面,在开发时,随着项目的增大,对所有页面都重新加载耗时会越来越长,有时候只是对某些样式做了修改,只更新修改的内容对开发而言更高效。
这时候我们就可以通过 Hot Module Replace (热模块替换)来实现,需要在 webpack.config.js 中开启,以及需要使用 Hot Module Replace 的地方通过 module.hot.accept 引入。
// webpack.config.js
module.exports = {
devServer: {
hot: true,
},
};
// index.js
import './math';
if (module.hot) {
module.hot.accept('./math', () => {
console.log('math文件被修改了');
});
}
当引入的 math.js 文件被修改时,执行修改的部分,以及修改后的回调函数。

hotOnly
当源代码编译出错且被解决后,浏览器会被刷新,所有内容将重新加载。想要编译错误也通过热更新来处理,需要设置 hotOnly 属性。
devServer: {
hot: true,
hotOnly: true,
}
此时,当错误被修复时,只会更新修复的文件

compress
compress 属性表示是否对编译后资源压缩,开启后将采用 gzip 的压缩方式,在响应头标识 Content-Encoding,浏览器会自动解压 gzip 文件

通过 compress: true 来开启,bundle.js 文件由原来的367kb压缩到93kb

proxy
比如本地项目运行在8000端口,访问接口 http://localhost:9000/math,会报错跨域

当项目开发时,接口请求存在跨域情况时,可通过 devServer 中的 proxy 属性配置代理解决,发送请求时直接使用 /api 来替代 http://localhost:9000/
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://localhost:9000/',
},
},
},
};
通过 fetch 发送网络请求
const url = '/api/math';
fetch(url)
.then((res) => {
console.log('then', res);
return res.text();
})
.then((res) => {
console.log('res', res);
});
请求成功并获取响应,但此时我们发现请求url地址多了个 "/api",以及请求源地址还是 8000端口

可以通过 pathRewrite 属性替换 /api,以及 changOrigin 修改请求host属性

其它参数
- host 设置主机地址
- port 设置端口
- open 编译后是否自动打开浏览器
- publicPath 指定 index.html 文件打包引用的基本路径
- contentBase 为引入的静态资源提供服务(默认值指向当前目录的路径)
- watchContentBase 当引用的静态资源发生变化时,是否刷新浏览器
整合以上 devServer 的配置
module.exports = {
devServer: {
hot: true,
contentBase: path.resolve(__dirname, './public'),
watchContentBase: true,
hotOnly: true,
port: 8000,
open: true,
compress: true,
proxy: {
'/api': {
target: 'http://localhost:9000/',
pathRewrite: {
'/api': '',
},
changeOrigin: true,
},
},
},
};
配置好 devServer 的属性,可以让我们的开发变得更高效~
以上就是 webpack dev server 与 hot module replace 相关的总结, 更多有关webpack的内容可以参考我其它的博文,持续更新中~
webpack dev server 与 hot module replace 提高开发效率的更多相关文章
- 配置Webpack Dev Server 实战操作方法步骤
本文摘要:配置 Webpack Dev Server 可以解决本地开发前端应用时,手动执行 webpack 命令或 yarn build 命令,再去浏览器中访问 dist/index.html 的麻烦 ...
- 笔记:配置 webpack dev server
笔记:配置 webpack dev server 安装 webpack-dev-server 组件 配置 webpack.config.js 配置 增加 html-webpack-plugin 组件 ...
- [Webpack] Access Webpack Dev Server from Mobile Safari on an iPhone
Testing your sites on mobile devices is a critical part of the development process. Webpack dev serv ...
- 合理使用webpack提高开发效率
虽然公司有提供现成的脚手架工具,但是作为开发人员懂得必要的相关知识还是很重要的.这样有利于提高我们的开发效率,优化我们的代码. 关于npm scripts 什么是npm scripts npm 允许在 ...
- 成吨提高开发效率:Intellij Shortcuts精简子集与思维模式
在线精简cheatsheet备查表:intellij.linesh.twGithub项目:intellij-mac-frequent-keymap Intellij的快捷键多而繁杂,从官方推荐的key ...
- 实用手册:130+ 提高开发效率的 vim 常用命令
Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...
- tomcat免重启随意更改java代码 提高开发效率
转载:http://developer.51cto.com/art/201012/241243.htm 做为了一个java开发人员,总是为因为要增加一个类,或是增加删除一个方法,甚至修改一个小处代码而 ...
- 如何利用 Visual Studio 自带工具提高开发效率
Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...
- 善用VS中的Code Snippet来提高开发效率
http://www.cnblogs.com/anderslly/archive/2009/02/16/vs2008-code-snippets.html http://www.cnblogs.com ...
- 提高开发效率的 Eclipse 实用操作
工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...
随机推荐
- 万字长文详解如何使用Swift提高代码质量
前言 京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发.之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务.通过使用 ...
- 跑在笔记本里的大语言模型 - GPT4All
何为GPT4All GPT4All 官网给自己的定义是:一款免费使用.本地运行.隐私感知的聊天机器人,无需GPU或互联网. 从官网可以得知其主要特点是: 本地运行(可包装成自主知识产权) 无需GPU( ...
- autojs系列-js入门1
开头 确保 Autojs 和 adb 还有模拟器安装调试完成之后,就可以进行js的学习了 调试安装一部分步骤可以参考 https://www.cnblogs.com/c-keke/p/14919615 ...
- 把ChatGPT调教成机器学习专家,以逻辑回归模型的学习为例
大家好我是章北海mlpy 看到一个蛮有意思的项目,可以把ChatGPT调教成导师 https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor 可以根据你选择的学习 ...
- 2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true
2022-09-30:以下go语言代码输出什么?A: true true false true false: B: true false false true false: C: true true ...
- 2020-10-27:go中select的执行流程是什么?
福哥答案2020-10-27: ***[2020-10-27:go中select的执行流程是什么?](https://bbs.csdn.net/topics/398044569)
- 2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助。 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍。 小团想知道他
2022-04-14:小美有一个长度为n的数组, 为了使得这个数组的和尽量大,她向会魔法的小团进行求助. 小团可以选择数组中至多两个不相交的子数组, 并将区间里的数全都变为原来的10倍. 小团想知道他 ...
- 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个
2022-01-15:中心对称数 III. 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low, high] 之间中心对称数的个 ...
- 代码随想录算法训练营Day18 二叉树| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
654.最大二叉树 题目链接:654.最大二叉树 给定一个不重复的整数数组 nums . 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值. 递归地 ...
- springboot接入influxdb
转载请注明出处: 1.添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> < ...